ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 5068|ตอบกลับ: 3

[VB.NET] Import ข้อมูลใน Excel เข้ามาแสดงผลในตารางกริด

[คัดลอกลิงก์]

310

กระทู้

501

โพสต์

6041

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6041




การ Import ข้อมูลใน Excel เพื่อนำมาแสดงผลลงตารางกริด แอดมินจะใช้วิธีการมองไฟล์ Excel เป็นเหมือนไฟล์ฐานข้อมูล โดยกำหนด Provider = Microsoft.ACE.OLEDB.12.0 (เราจึงต้องเลือกใช้ Namespace := System.Data.OleDb) จากนั้นเมื่อ Connect เรียบร้อย ก็จะทำการโหลด WorkSheet ซึ่งจะมองเห็นเป็นตารางข้อมูล (Table) เข้ามายัง ComboBox Control จากนั้นผู้ใช้ก็เลือกรายการ WorkSheet เพื่อทำการแสดงผลข้อมูลในตารางกริด ... จบหลักการวิธีคิด


มาดูโค้ดต้นฉบับกันเถอะ ...
  1. Imports System.Data.OleDb

  2. Public Class frmExcel2DataGrid

  3.     ' / --------------------------------------------------------------------
  4.     ' / เลือกไฟล์ Excel
  5.     Private Sub btnOpenExcel_Click(sender As System.Object, e As System.EventArgs) Handles btnOpenExcel.Click
  6.         '/ ประกาศใช้งาน Open File Dialog ในแบบ Run Time
  7.         Dim dlgOpenFile As OpenFileDialog = New OpenFileDialog()

  8.         ' / ตั้งค่าการใช้งาน Open File Dialog
  9.         With dlgOpenFile
  10.             .InitialDirectory = MyPath(Application.StartupPath)
  11.             .Title = "เลือกไฟล์ MS Excel"
  12.             .Filter = "All Files (*.*)|*.*|Excel files (*.xlsx)|*.xlsx|CSV Files (*.csv)|*.csv|XLS Files (*.xls)|*xls"
  13.             .FilterIndex = 1
  14.             .RestoreDirectory = True
  15.         End With
  16.         '/ หากเลือกปุ่ม OK หลังจากการ Browse ...
  17.         If dlgOpenFile.ShowDialog() = DialogResult.OK Then
  18.             txtFileName.Text = dlgOpenFile.FileName
  19.             Dim strConn As String = _
  20.                 " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
  21.                 dlgOpenFile.FileName & ";" & _
  22.                 " Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
  23.             Dim Conn As New OleDbConnection(strConn)
  24.             Conn.Open()
  25.             '/ มอง WorkSheet ให้เป็นตารางข้อมูล (Table)
  26.             Dim dtSheets As DataTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
  27.             Dim drSheet As DataRow

  28.             cmbSheetName.Items.Clear()
  29.             '/ นำรายชื่อ WorkSheet ทั้งหมด มาเก็บไว้ที่ ComboBox เพื่อรอให้ User เลือกนำไปใช้งาน
  30.             For Each drSheet In dtSheets.Rows
  31.                 cmbSheetName.Items.Add(drSheet("TABLE_NAME").ToString)
  32.             Next
  33.             Conn.Close()
  34.         End If

  35.     End Sub

  36.     ' / --------------------------------------------------------------------
  37.     '// เลือก WorkSheet แล้วแสดงผลข้อมูลลงในตารางกริด
  38.     Private Sub cmbSheetName_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbSheetName.SelectedIndexChanged
  39.         Dim Conn As OleDbConnection
  40.         Dim Comm As OleDbCommand
  41.         Dim DAP As OleDbDataAdapter
  42.         Dim DS As DataSet

  43.         Dim strConn As String = _
  44.             " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
  45.             txtFileName.Text & ";" & _
  46.             " Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
  47.         Try
  48.             Conn = New OleDbConnection
  49.             Conn.ConnectionString = strConn
  50.             Comm = New OleDbCommand
  51.             '/ เสมือน WorkSheet เป็น Table ในฐานข้อมูล
  52.             Comm.CommandText = "Select * FROM [" & cmbSheetName.Text & "]"
  53.             Comm.Connection = Conn
  54.             DAP = New OleDbDataAdapter(Comm)
  55.             DS = New DataSet
  56.             Conn.Open()
  57.             DAP.Fill(DS, "Sheet1")
  58.             '/ ผูกข้อมูล (Bound Data) เข้ากับ Sheet1
  59.             dgvData.DataSource = DS.Tables("Sheet1")
  60.             '//
  61.             Call SetupDGVData()

  62.         Catch ex As Exception
  63.             MessageBox.Show(ex.Message)
  64.         Finally
  65.             Conn = Nothing
  66.             Comm = Nothing
  67.             DAP = Nothing
  68.             DS = Nothing
  69.         End Try
  70.     End Sub

  71.     ' / --------------------------------------------------------------------
  72.     '// Initialize DataGridView @Run Time
  73.     Private Sub SetupDGVData()
  74.         With dgvData
  75.             .RowHeadersVisible = False
  76.             .AllowUserToAddRows = False
  77.             .AllowUserToDeleteRows = False
  78.             .AllowUserToResizeRows = False
  79.             .MultiSelect = False
  80.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  81.             .ReadOnly = True
  82.             .Font = New Font("Tahoma", 9)
  83.             ' Autosize Column
  84.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  85.             '// Even-Odd Color
  86.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  87.             ' Adjust Header Styles
  88.             With .ColumnHeadersDefaultCellStyle
  89.                 .BackColor = Color.Navy
  90.                 .ForeColor = Color.Black ' Color.White
  91.                 .Font = New Font("Tahoma", 9, FontStyle.Bold)
  92.             End With
  93.         End With
  94.     End Sub

  95.     Private Sub frmExcel2DataGrid_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  96.         Me.Dispose()
  97.         Application.Exit()
  98.     End Sub

  99.     ' / ------------------------------------------------------------------
  100.     ' / ฟังค์ชั่นที่เราสามารถกำหนด Path ให้กับโปรแกรมของเราเอง
  101.     ' / Ex.
  102.     ' / AppPath = C:\My Project\bin\debug
  103.     ' / Replace "\bin\debug" with ""
  104.     ' / Return : C:\My Project\
  105.     Function MyPath(AppPath As String) As String
  106.         AppPath = AppPath.ToLower()
  107.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "")
  108.         '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
  109.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  110.     End Function

  111.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  112.         Me.Close()
  113.     End Sub

  114. End Class
คัดลอกไปที่คลิปบอร์ด



ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

33

โพสต์

372

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
372
โพสต์ 2019-10-2 22:21:05 | ดูโพสต์ทั้งหมด

ขอบพระคุณคับ

310

กระทู้

501

โพสต์

6041

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6041
 เจ้าของ| โพสต์ 2020-11-4 15:08:01 | ดูโพสต์ทั้งหมด

โค้ดเพิ่มเติม สำหรับคนที่อยากใช้ ListView แทน DataGridView ... เพราะ ListView ไม่สามารถทำการ Bound Data เข้าหาได้โดยตรง ดังนั้นเราต้องทำการวนรอบ (Loop) แทน โดยต้องวนหาจำนวนหลัก (Column) ที่อยู่ทั้งหมดออกมาก่อน จากนั้นก็ค่อยวนรอบตามจำนวนแถวข้อมูลใน Excel ...

เพิ่ม ListView Control เข้ามา 1 ตัว โดยไม่ต้องปรับคุณสมบัติอะไรมาก ... เหตุการณ์การเลือก Sheet (เสมือนตารางข้อมูล) จะเกิดขึ้นที่เหตุการณ์การเปลี่ยนแปลงของ ComboBox ...

  1.     ' / --------------------------------------------------------------------
  2.     '// เลือก WorkSheet แล้วแสดงผลข้อมูลลงใน ListView
  3.     Private Sub cmbSheetName_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbSheetName.SelectedIndexChanged
  4.         Dim Conn As OleDbConnection
  5.         Dim DA As OleDbDataAdapter
  6.         Dim DT As New DataTable
  7.         Dim strConn As String = _
  8.             " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
  9.             txtFileName.Text & ";" & _
  10.             " Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
  11.         Try
  12.             Conn = New OleDbConnection
  13.             Conn.ConnectionString = strConn
  14.             If Conn.State = ConnectionState.Closed Then Conn.Open()
  15.             DA = New OleDbDataAdapter("Select * FROM [" & cmbSheetName.Text & "]", Conn)
  16.             DA.Fill(DT)
  17.             With ListView1
  18.                 .Clear()
  19.                 .View = View.Details
  20.                 .GridLines = True
  21.                 .FullRowSelect = True
  22.                 .HideSelection = False
  23.                 .MultiSelect = False
  24.             End With
  25.             '// อ่านจำนวนหลักทั้งหมดเข้ามาก่อน
  26.             For iCol = 0 To DT.Columns.Count - 1
  27.                 ListView1.Columns.Add(DT.Columns(iCol).ColumnName)
  28.                 '// ปรับระยะความกว้างใหม่
  29.                 ListView1.Columns(iCol).Width = ListView1.Width \ (DT.Columns.Count - 1)
  30.             Next
  31.             '// อ่านข้อมูลในแต่ละแถว
  32.             For sRow = 0 To DT.Rows.Count - 1
  33.                 Dim LV As New ListViewItem
  34.                 Dim dRow As DataRow = DT.Rows(sRow)
  35.                 LV = ListView1.Items.Add(dRow.Item(0))  '// --> Primary Node
  36.                 For iCol = 1 To DT.Columns.Count - 1
  37.                     LV.SubItems.Add(dRow(iCol).ToString())
  38.                 Next
  39.             Next
  40.             Conn.Close()
  41.         Catch ex As Exception
  42.             MessageBox.Show(ex.Message)
  43.         Finally
  44.             Conn = Nothing
  45.             DT = Nothing
  46.             DA = Nothing
  47.         End Try
  48.     End Sub
คัดลอกไปที่คลิปบอร์ด

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

3

โพสต์

59

เครดิต

Member

Rank: 2

เครดิต
59
โพสต์ 2023-4-6 13:13:36 | ดูโพสต์ทั้งหมด

thank you , sir
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-4-24 10:29 , Processed in 0.446871 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้