|
การ Import ข้อมูลใน Excel เพื่อนำมาแสดงผลลงตารางกริด แอดมินจะใช้วิธีการมองไฟล์ Excel เป็นเหมือนไฟล์ฐานข้อมูล โดยกำหนด Provider = Microsoft.ACE.OLEDB.12.0 (เราจึงต้องเลือกใช้ Namespace := System.Data.OleDb) จากนั้นเมื่อ Connect เรียบร้อย ก็จะทำการโหลด WorkSheet ซึ่งจะมองเห็นเป็นตารางข้อมูล (Table) เข้ามายัง ComboBox Control จากนั้นผู้ใช้ก็เลือกรายการ WorkSheet เพื่อทำการแสดงผลข้อมูลในตารางกริด ... จบหลักการวิธีคิด
มาดูโค้ดต้นฉบับกันเถอะ ...
- Imports System.Data.OleDb
- Public Class frmExcel2DataGrid
- ' / --------------------------------------------------------------------
- ' / เลือกไฟล์ Excel
- Private Sub btnOpenExcel_Click(sender As System.Object, e As System.EventArgs) Handles btnOpenExcel.Click
- '/ ประกาศใช้งาน Open File Dialog ในแบบ Run Time
- Dim dlgOpenFile As OpenFileDialog = New OpenFileDialog()
- ' / ตั้งค่าการใช้งาน Open File Dialog
- With dlgOpenFile
- .InitialDirectory = MyPath(Application.StartupPath)
- .Title = "เลือกไฟล์ MS Excel"
- .Filter = "All Files (*.*)|*.*|Excel files (*.xlsx)|*.xlsx|CSV Files (*.csv)|*.csv|XLS Files (*.xls)|*xls"
- .FilterIndex = 1
- .RestoreDirectory = True
- End With
- '/ หากเลือกปุ่ม OK หลังจากการ Browse ...
- If dlgOpenFile.ShowDialog() = DialogResult.OK Then
- txtFileName.Text = dlgOpenFile.FileName
- Dim strConn As String = _
- " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
- dlgOpenFile.FileName & ";" & _
- " Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
- Dim Conn As New OleDbConnection(strConn)
- Conn.Open()
- '/ มอง WorkSheet ให้เป็นตารางข้อมูล (Table)
- Dim dtSheets As DataTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
- Dim drSheet As DataRow
- cmbSheetName.Items.Clear()
- '/ นำรายชื่อ WorkSheet ทั้งหมด มาเก็บไว้ที่ ComboBox เพื่อรอให้ User เลือกนำไปใช้งาน
- For Each drSheet In dtSheets.Rows
- cmbSheetName.Items.Add(drSheet("TABLE_NAME").ToString)
- Next
- Conn.Close()
- End If
- End Sub
- ' / --------------------------------------------------------------------
- '// เลือก WorkSheet แล้วแสดงผลข้อมูลลงในตารางกริด
- Private Sub cmbSheetName_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbSheetName.SelectedIndexChanged
- Dim Conn As OleDbConnection
- Dim Comm As OleDbCommand
- Dim DAP As OleDbDataAdapter
- Dim DS As DataSet
- Dim strConn As String = _
- " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
- txtFileName.Text & ";" & _
- " Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
- Try
- Conn = New OleDbConnection
- Conn.ConnectionString = strConn
- Comm = New OleDbCommand
- '/ เสมือน WorkSheet เป็น Table ในฐานข้อมูล
- Comm.CommandText = "Select * FROM [" & cmbSheetName.Text & "]"
- Comm.Connection = Conn
- DAP = New OleDbDataAdapter(Comm)
- DS = New DataSet
- Conn.Open()
- DAP.Fill(DS, "Sheet1")
- '/ ผูกข้อมูล (Bound Data) เข้ากับ Sheet1
- dgvData.DataSource = DS.Tables("Sheet1")
- '//
- Call SetupDGVData()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- Finally
- Conn = Nothing
- Comm = Nothing
- DAP = Nothing
- DS = Nothing
- End Try
- End Sub
- ' / --------------------------------------------------------------------
- '// Initialize DataGridView @Run Time
- Private Sub SetupDGVData()
- With dgvData
- .RowHeadersVisible = False
- .AllowUserToAddRows = False
- .AllowUserToDeleteRows = False
- .AllowUserToResizeRows = False
- .MultiSelect = False
- .SelectionMode = DataGridViewSelectionMode.FullRowSelect
- .ReadOnly = True
- .Font = New Font("Tahoma", 9)
- ' Autosize Column
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- '// Even-Odd Color
- .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
- ' Adjust Header Styles
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.Black ' Color.White
- .Font = New Font("Tahoma", 9, FontStyle.Bold)
- End With
- End With
- End Sub
- Private Sub frmExcel2DataGrid_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- Application.Exit()
- End Sub
- ' / ------------------------------------------------------------------
- ' / ฟังค์ชั่นที่เราสามารถกำหนด Path ให้กับโปรแกรมของเราเอง
- ' / Ex.
- ' / AppPath = C:\My Project\bin\debug
- ' / Replace "\bin\debug" with ""
- ' / Return : C:\My Project\
- Function MyPath(AppPath As String) As String
- AppPath = AppPath.ToLower()
- MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "")
- '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
- If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
- End Function
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|