EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่างเพิ่มเติม)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
Code: Select all
'other code
'Activate sheet1
wbook.sheets(1).activate
'other code
'Activate sheet2
wbook.sheets(2).activate
'other code
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
wbook = oXL.Workbooks.Add
หมายถึงกำหนดให้ wbook
คือ Workbook ที่เพิ่มเข้ามาใหม่wbook
เราสามารถเขียนได้เป็นwbook.sheets(1).select
เพื่อเลือก Sheet ลำดับที่ 1 ของ wbook
หรือwbook.sheets(1).activate
เพื่อ Active Sheet ลำดับที่ 1 ของ wbook
wbook
ได้ตามต้องการ เช่นset wsheet = wbook.sheets(1)
จากนั้นค่อยเขี่ยน Code เพื่อกระทำกับ wsheet
ต่อไปwsheet = wbook.activesheet
ตาม Code ที่แนบมาไม่ได้ครับ