Page 1 of 1

วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

Posted: Mon Jan 06, 2014 10:54 pm
by H.Suraseth
เนื่องจาก ตอนนี้กระผมสามารถ Update ข้อมูลลง Excel ได้แล้วครับ
แต่กระผมต้องการ เลือก Sheet ที่ต้องการจะ Update เช่น

ข้อมูลชุดที่ 1 แสดงใน Sheet1 ของ Excel
ข้อมูลชุดที่ 2 แสดงใน Sheet3 ของ Excel เดี่ยวกัน

ตัวอย่าง Code VB ครับ

Code: Select all

 'เมื่อผู้ใช้กดปุ่ม "แสดงใน Excel"
    Private Sub btnExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcel.Click
        Dim table As DataTable = dgvDataOutput1.DataSource  '-- ข้อมูลชุดที่ 1
        Dim tabae2 As DataTable = dgvDataOutput2.DataSource  '--ข้อมูลชุดที่ 2
        Dim headers() As String = {"ลำดับ", "สถานที่ส่งสินค้า", "ประเภทการขออนุมัติ", "จำนวนส่ง (เที่ยว)", "จำนวนตรวจสอบเที่ยว", "ผลต่าง", "ผู้ตรวจสอบ"}

        Dim oXL As Excel.Application
        Dim wbook As Excel.Workbook
        Dim wsheet As Excel.Worksheet

        Dim wRng As Excel.Range

        oXL = CreateObject("Excel.Application")
        wbook = oXL.Workbooks.Add
        wsheet = wbook.ActiveSheet
        oXL.Visible = True
        oXL.UserControl = True

        Dim title As String = "เรื่อง สรุปเศษวัสดุนำออกพื้นที่โรงงาน"
        Dim product As String = "ชื่อสินค้า " & cbProduct.Text
        Dim dmy As String

        If _StrDate = _EndDate Then
            dmy = "ประจำวันที่ " & _StrDate & " "
        Else
            dmy = "ประจำวันที่ " & _StrDate & " ถึง " & _EndDate & " "
        End If

        '--ยุบเซลล์ของแถวแรกแล้วแสดงข้อความไตเติล ที่รับเข้ามา
        With wsheet.Range("B2", "H2")
            .Merge()
            .Value = title
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
            .Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        End With

        '--ยุบเซลล์ของแถวแรกแล้วแสดงข้อความวันที่ ที่รับเข้ามา
        With wsheet.Range("B3", "H3")
            .Merge()
            .Value = dmy & product
            .Interior.ColorIndex = 36       '-- เติมสีภายในของส่วนหัว
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
            .Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        End With

        '--ให้แถวแรกขอตาราง Excel แสดงชื่อคอลัมน์โดยชื่อคอลัมน์นี้จะอ่านจากตารางใน Dataset
        For i = 0 To table.Columns.Count - 1
            '--แถวแรกใน Excel มีลำดับเป็น 1 คงที่เพราะเป็นแถวเดียวกัน
            '--ส่วนลำดับคอลัมน์จะเริ่มจาก 1 แล้วเพิ่มขึ้นเพราะเราอ่านคอลัมน์ถัดไปเรื่อยๆ
            wsheet.Cells(4, i + 2) = headers(i)
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        Next

        With wsheet.Range("B4", "H4")
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        '--วนลูปตามจำนวนแถวใน DataSet
        For r = 0 To table.Rows.Count - 1
            '--อ่านข้อมูลจากแต่ละคอลัมน์
            For c = 0 To table.Columns.Count - 1
                '--เริ่มเขียนจากแถวที่ 2 คอลัมน์ที่ 1 
                wsheet.Cells(r + 5, c + 2) = table.Rows(r)(c)
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
            Next
        Next

        With wsheet.Columns("B")
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        With wsheet.Columns("D")
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        With wsheet.Columns("E")
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        wRng = wsheet.Range("B4", "H4")
        wRng.EntireColumn.AutoFit()

        wRng = Nothing
        wsheet = Nothing
        wbook = Nothing
        oXL = Nothing
    End Sub
ขอบคุณครับผม

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

Posted: Tue Jan 07, 2014 7:00 am
by snasui
:D การเลือกชีทสามารถใช้ Code ตามด้านล่างครับ

Code: Select all

'other code
'Activate sheet1
wbook.sheets(1).activate
'other code
'Activate sheet2
wbook.sheets(2).activate
'other code
กระทู้นี้ผมย้ายมาจาก Excel มาไว้ที่ Other เนื่องจากเห็นว่าเป็นการเขียนด้วย VB ไม่ใช่ VBA ใน Excel

สำหรับการปรับ Code ให้แสดงเป็น Code ดูตัวอย่างจากที่นี่ครับ viewtopic.php?f=3&t=1187

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

Posted: Tue Jan 07, 2014 7:58 am
by H.Suraseth
ครับ ขอบคุณมากครับท่านอาจารย์

ผมมือใหม่ หัดโพสตื ต้องขอโทษ ด้วยครับ

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

Posted: Tue Jan 07, 2014 8:47 am
by H.Suraseth
ขอโทษนะครับ

ผมลองทำแล้วครับ เกิด error ครับ
อาจเป็นเพราะผม ใส่ code ในตำแหน่งที่ไม่ถูกต้อง

ผมควรเรียกใช้คำสั่งตอนไหน ช่วงไหนครับ

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

Posted: Tue Jan 07, 2014 11:19 am
by snasui
:D แนบ Code ที่ปรับแล้วมาด้วยจะได้เห็นว่าแทรก Code เข้าไปในช่วงใดครับ

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

Posted: Tue Jan 07, 2014 3:36 pm
by H.Suraseth
Code program VB ครับ

Code: Select all

Private Sub btnExcelSheet1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcelSheet1.Click
        Dim table As DataTable = dgvDataOutput1.DataSource  '-- ข้อมูลชุดที่ 1
        'Dim tabae2 As DataTable = dgvDataOutput2.DataSource  '--ข้อมูลชุดที่ 2
        Dim headers() As String = {"ลำดับ", "สถานที่ส่งสินค้า", "ประเภทการขออนุมัติ", "จำนวนส่ง (เที่ยว)", "จำนวนตรวจสอบเที่ยว", "ผลต่าง", "ผู้ตรวจสอบ"}

        Dim oXL As Excel.Application
        Dim wbook As Excel.Workbook
        Dim wsheet As Excel.Worksheet

        Dim wRng As Excel.Range

        oXL = CreateObject("Excel.Application")
        wbook = oXL.Workbooks.Add

[b]        '-------------------------------------------------
        'other code
        'Activate sheet1
        'wbook.Sheets(1).activate()    
        'wsheet = wbook.Sheets(2).           '-- ตรงส่วนนี้ครับอาจารย์ จะใช้เป็นการตั้งค่า Sheet ที่ต้องการ Activate แต่เมื่อพิม์ "." ไม่มีคำสั่ง "activate()" ในการเรียกใช้คำสั่งเลยครับ
        '----------------------------------------------------[/b]

        wsheet = wbook.ActiveSheet

        oXL.Visible = True
        oXL.UserControl = True

        Dim title As String = "เรื่อง สรุปเศษวัสดุนำออกพื้นที่โรงงาน"
        Dim product As String = "ชื่อสินค้า " & cbProduct.Text
        Dim dmy As String

        If _StrDate = _EndDate Then
            dmy = "วันที่ " & _StrDate & " "
        Else
            dmy = "วันที่ " & _StrDate & " ถึง " & _EndDate & " "
        End If

        '--ยุบเซลล์ของแถวแรกแล้วแสดงข้อความไตเติล ที่รับเข้ามา
        With wsheet.Range("B2", "H2")
            .Merge()
            .Value = title
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
            .Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        End With

        '--ยุบเซลล์ของแถวแรกแล้วแสดงข้อความวันที่ ที่รับเข้ามา
        With wsheet.Range("B3", "H3")
            .Merge()
            .Value = dmy & product
            .Interior.ColorIndex = 36       '-- เติมสีภายในของส่วนหัว
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
            .Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        End With

        '--ให้แถวแรกขอตาราง Excel แสดงชื่อคอลัมน์โดยชื่อคอลัมน์นี้จะอ่านจากตารางใน Dataset
        For i = 0 To table.Columns.Count - 1
            '--แถวแรกใน Excel มีลำดับเป็น 1 คงที่เพราะเป็นแถวเดียวกัน
            '--ส่วนลำดับคอลัมน์จะเริ่มจาก 1 แล้วเพิ่มขึ้นเพราะเราอ่านคอลัมน์ถัดไปเรื่อยๆ
            wsheet.Cells(4, i + 2) = headers(i)
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        Next

        With wsheet.Range("B4", "H4")
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        '--วนลูปตามจำนวนแถวใน DataSet
        For r = 0 To table.Rows.Count - 1
            '--อ่านข้อมูลจากแต่ละคอลัมน์
            For c = 0 To table.Columns.Count - 1
                '--เริ่มเขียนจากแถวที่ 2 คอลัมน์ที่ 1 
                wsheet.Cells(r + 5, c + 2) = table.Rows(r)(c)
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
            Next
        Next
    End Sub

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

Posted: Tue Jan 07, 2014 4:44 pm
by snasui
:D จาก Code เดิม wbook = oXL.Workbooks.Add หมายถึงกำหนดให้ wbook คือ Workbook ที่เพิ่มเข้ามาใหม่

เมื่อเพิ่มเข้ามาใหม่จะมี Sheet เข้ามาให้ทันทีอยู่แล้ว อยู่ที่การกำหนดในโปรแกรม Excel ว่าจะเริ่มต้นด้วยกี่ชีท ปกติค่า Default คือ 3 ชีท

หากต้องการจะไปยัง Sheet1 ของ wbook เราสามารถเขียนได้เป็น

wbook.sheets(1).select เพื่อเลือก Sheet ลำดับที่ 1 ของ wbook หรือ

wbook.sheets(1).activate เพื่อ Active Sheet ลำดับที่ 1 ของ wbook

เมื่อ Active หรือ Select ขึ้นมาแล้วก็สามารถที่จะเขียน Code เพื่อจัดการกับชีทเหล่านั้นได้

การ Active หรือ Select ไม่ได้เป็นสิ่งจำเป็น เราสามารถใช้ตัวแปรเข้ามาเป็น Sheet ใด ๆ ของ wbook ได้ตามต้องการ เช่น

set wsheet = wbook.sheets(1) จากนั้นค่อยเขี่ยน Code เพื่อกระทำกับ wsheet ต่อไป

การให้ตัวแปรกับ Workbook, Worksheet ฯลฯ จะต้องใช้ Set นำหน้าเนื่องจากว่าเป็น Object การ Assign จึงต้องใช้ Set เสมอครับ จะเขียนการ Assign ค่าตัวแปรให้กับ Object ที่เป็น Worksheet เป็นเช่น wsheet = wbook.activesheet ตาม Code ที่แนบมาไม่ได้ครับ

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

Posted: Tue Jan 07, 2014 5:54 pm
by H.Suraseth
ได้แล้วครับ ขอบคุณมากๆๆๆๆ ครับ