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

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

[VB.NET] การค้นหาข้อมูลใน Excel ด้วยการใช้ DataTable

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

262

กระทู้

422

โพสต์

3751

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3751




ในการนำไฟล์ MS Excel มาทำการบันทึกข้อมูลในแบบ Back End DataBase มันก็คงจะไม่ค่อยเหมาะสมเท่าไหร่นัก แต่หากมีข้อมูลที่ไม่ได้เยอะแยะมากมาย ก็คงจะพอกล้อมแกล้มไปได้ โดยทำการติดต่อกับไฟล์ Excel ในรูปแบบการติดต่อกับไฟล์ฐานข้อมูล (ใช้ ADO.NET) และมอง Sheet เสมือน Table หรือตารางข้อมูลนั่นเอง สำหรับโค้ดชุดนี้จะเป็นการค้นหาข้อมูลใน Sheet ของ Excel โดยนำข้อมูลในแต่ละแถวมาเก็บลง DataTable เอาไว้ก่อน จากนั้นก็ค่อยทำการค้นหาข้อมูลใน DataTable แทน ... [VB.NET] การนำไฟล์ MS Excel มาทำงานเป็นเหมือนฐานข้อมูล (DataBase Excel) ... รอบหน้าค่อยเป็นการอัพเดตข้อมูลในแต่ละแถวรายการครับผม ...

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

  2. Public Class frmSearchExcelDataTable

  3.     Dim DT As New DataTable

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

  9.         ' / ตั้งค่าการใช้งาน Open File Dialog
  10.         With dlgOpenFile
  11.             .InitialDirectory = MyPath(Application.StartupPath)
  12.             .Title = "เลือกไฟล์ MS Excel"
  13.             .Filter = "Excel Files (*.xlsx)|*.xlsx|CSV Files (*.csv)|*.csv|XLS Files (*.xls)|*xls"
  14.             .FilterIndex = 0
  15.             .RestoreDirectory = True
  16.         End With
  17.         '/ หากเลือกปุ่ม OK หลังจากการ Browse ...
  18.         If dlgOpenFile.ShowDialog() = DialogResult.OK Then
  19.             txtFileName.Text = dlgOpenFile.FileName
  20.             Dim strConn As String = _
  21.                 " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
  22.                 dlgOpenFile.FileName & ";" & _
  23.                 " Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
  24.             Dim Conn As New OleDbConnection(strConn)
  25.             Conn.Open()
  26.             '/ มอง WorkSheet ให้เป็นตารางข้อมูล (Table)
  27.             Dim dtSheets As DataTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
  28.             Dim drSheet As DataRow
  29.             '//
  30.             cmbSheetName.Items.Clear()
  31.             '/ นำรายชื่อ WorkSheet ทั้งหมด มาเก็บไว้ที่ ComboBox เพื่อรอให้ User เลือกนำไปใช้งาน
  32.             For Each drSheet In dtSheets.Rows
  33.                 cmbSheetName.Items.Add(drSheet("TABLE_NAME").ToString)
  34.             Next
  35.             Conn.Close()
  36.         End If
  37.     End Sub

  38.     ' / --------------------------------------------------------------------
  39.     '// เลือก WorkSheet แล้วแสดงผลข้อมูลลงในตารางกริด
  40.     Private Sub cmbSheetName_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbSheetName.SelectedIndexChanged
  41.         Dim Conn As OleDbConnection
  42.         Dim Cmd As OleDbCommand
  43.         Dim DA As New OleDbDataAdapter
  44.         Dim DS As DataSet
  45.         Dim strConn As String = _
  46.             " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
  47.             txtFileName.Text & ";" & _
  48.             " Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
  49.         Try
  50.             dgvData.DataSource = Nothing
  51.             DT = New DataTable
  52.             Conn = New OleDbConnection
  53.             Conn.ConnectionString = strConn
  54.             Cmd = New OleDbCommand
  55.             '/ เสมือน WorkSheet เป็น Table ในฐานข้อมูล
  56.             Cmd.CommandText = "Select * FROM [" & cmbSheetName.Text & "]"
  57.             Cmd.Connection = Conn
  58.             DA.SelectCommand = Cmd
  59.             DA.Fill(DT)
  60.             DT.TableName = cmbSheetName.Text.Replace("$", "")
  61.             dgvData.DataSource = DT
  62.             '//
  63.             lblRecCount.Text = "[จำนวน : " & dgvData.Rows.Count & " รายการ]"
  64.         Catch ex As Exception
  65.             MessageBox.Show(ex.Message)
  66.         Finally
  67.             Conn = Nothing
  68.             Cmd = Nothing
  69.             DA = Nothing
  70.             DS = Nothing
  71.         End Try
  72.     End Sub

  73.     ' / --------------------------------------------------------------------
  74.     '// การค้นหาข้อมูลจาก DataTable
  75.     Private Sub txtSearch_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtSearch.KeyPress
  76.         '// ยังไม่ได้โหลดข้อมูลเข้ามา
  77.         If DT.Rows.Count = 0 Then
  78.             txtSearch.Clear()
  79.             Return
  80.         End If
  81.         '// ตัดตัวอักขระที่ไม่พึงประสงค์ ที่มีผลต่อการค้นหาข้อมูล
  82.         txtSearch.Text = txtSearch.Text.Trim.Replace("'", "").Replace("*", "").Replace("%", "")
  83.         '// เช็คว่ากด Enter ในช่อง TextBox ที่ใช้ค้นหาหรือไม่
  84.         If Asc(e.KeyChar) = 13 Then
  85.             Dim DTSearch As New DataTable
  86.             dgvData.DataSource = Nothing
  87.             '// เพิ่มหลัก (Column) เข้ามาใหม่ให้กับ DataTable
  88.             DTSearch.Columns.Add("ID", GetType(String))
  89.             DTSearch.Columns.Add("Name", GetType(String))
  90.             DTSearch.Columns.Add("Point", GetType(Integer))
  91.             '// ค้นหาข้อมูลด้วย LIKE
  92.             Dim result() As DataRow = DT.Select("NAME LIKE '*" & txtSearch.Text & "*'")
  93.             '// หากพบข้อมูลก็ทำการลูปรายการแถวข้อมูล
  94.             For Each row As DataRow In result
  95.                 '// เพิ่มรายการแถวข้อมูลเข้าไปยัง DataTable
  96.                 DTSearch.Rows.Add(row(0).ToString, row(1).ToString, row(2).ToString)
  97.             Next
  98.             dgvData.DataSource = DTSearch
  99.             txtSearch.Clear()
  100.             lblRecCount.Text = "[จำนวน : " & dgvData.Rows.Count & " รายการ]"
  101.         End If
  102.     End Sub

  103.     Private Sub dgvData_DoubleClick(sender As Object, e As System.EventArgs) Handles dgvData.DoubleClick
  104.         If dgvData.Rows.Count = 0 Then Return
  105.         MessageBox.Show("คุณเลือก: " & vbCrLf & _
  106.                         "ID = " & dgvData.SelectedRows(0).Cells(0).Value.ToString & vbCrLf & _
  107.                         "NAME = " & dgvData.SelectedRows(0).Cells(1).Value.ToString & vbCrLf & _
  108.                         "POINT = " & dgvData.SelectedRows(0).Cells(2).Value.ToString)
  109.     End Sub

  110.     Private Sub frmSearchExcelDataTable_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  111.         Call SetupDGVData()
  112.         lblRecCount.Text = "[จำนวน : 0 รายการ]"
  113.     End Sub

  114.     ' / --------------------------------------------------------------------
  115.     '// Initialize DataGridView @Run Time
  116.     Private Sub SetupDGVData()
  117.         With dgvData
  118.             .RowHeadersVisible = False
  119.             .AllowUserToAddRows = False
  120.             .AllowUserToDeleteRows = False
  121.             .AllowUserToResizeRows = False
  122.             .MultiSelect = False
  123.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  124.             .ReadOnly = True
  125.             .Font = New Font("Tahoma", 9)
  126.             ' Autosize Column
  127.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  128.             '// Even-Odd Color
  129.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  130.             ' Adjust Header Styles
  131.             With .ColumnHeadersDefaultCellStyle
  132.                 .BackColor = Color.Navy
  133.                 .ForeColor = Color.Black ' Color.White
  134.                 .Font = New Font("Tahoma", 9, FontStyle.Bold)
  135.             End With
  136.         End With
  137.     End Sub

  138.     ' / ------------------------------------------------------------------
  139.     ' / ฟังค์ชั่นที่เราสามารถกำหนด Path ให้กับโปรแกรมของเราเอง
  140.     ' / Ex.
  141.     ' / AppPath = C:\My Project\bin\debug
  142.     ' / Replace "\bin\debug" with ""
  143.     ' / Return : C:\My Project\
  144.     Function MyPath(AppPath As String) As String
  145.         AppPath = AppPath.ToLower()
  146.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "")
  147.         '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
  148.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  149.     End Function

  150.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  151.         Me.Close()
  152.     End Sub

  153.     Private Sub frmSearchExcelDataTable_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  154.         Me.Dispose()
  155.         GC.SuppressFinalize(Me)
  156.         Application.Exit()
  157.     End Sub

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


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

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

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

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

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

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

GMT+7, 2021-9-22 16:20 , Processed in 0.049001 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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