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

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

[VB.NET] การ Import Excel เข้ามาใน ListView ด้วย Interop Service

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

308

กระทู้

499

โพสต์

6021

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6021

โพสต์ก่อนหน้าเป็นการ Import Excel เข้ามาใน Listview Control ด้วยการใช้ ADO.NET คือการมอง Sheet เป็นเหมือนกับตารางข้อมูล (DataTable) คราวนี้จะใช้ Interop Service หรือการใช้งาน COM (Component Object Model) ก็เป็นเทคโนโลยีรุ่นเก่า ก่อนที่จะมาเป็น Dot Net ในทุกวันนี้แหละครับ ดังนั้นแล้วในเครื่องเราจะต้องทำการติดตั้ง MS Excel เอาไว้ก่อนด้วย เพราะต้อง Add Reference COM เข้ามาช่วย โดยจะทำการอ่านข้อมูลจาก Sheet เข้ามาทีละหลักและทีละแถว แล้วทำการเก็บชุดข้อมูลไว้ใน DataTable เหมือนกับการใช้ ADO.NET ทุกอย่าง แม้ว่าการอ่านข้อมูลเข้ามาจะทำได้ช้ากว่า ADO.NET แต่มันมีข้อดีคือสามารถเลือกเซลล์ หรือช่วงข้อมูล (Range) ที่เราต้องการได้ ...




เลือก Add References ... เลือก COM (Component Object Model) ทั้งนี้ก็ขึ้นอยู่กับเวอร์ชั่นของ Excel ที่ติดตั้งในเครื่องของแต่ละคน ...

มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Imports Excel = Microsoft.Office.Interop.Excel

  2. Public Class frmWorkSheet2ListView

  3.     Dim DS As DataSet = New DataSet()

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

  10.         '// ตั้งค่าการใช้งาน Open File Dialog
  11.         With dlgOpenFile
  12.             .InitialDirectory = MyPath(System.Windows.Forms.Application.StartupPath)
  13.             .Title = "เลือกไฟล์ MS Excel"
  14.             .Filter = "XLSX Files (*.xlsx)|*.xlsx|XLS Files (*.xls)|*xls"
  15.             .FilterIndex = 1
  16.             .RestoreDirectory = True
  17.         End With
  18.         '// หากเลือกปุ่ม OK หลังจากการ Browse ...
  19.         If dlgOpenFile.ShowDialog() = DialogResult.OK Then
  20.             txtFileName.Text = dlgOpenFile.FileName
  21.             '//
  22.             cmbSheetName.Items.Clear()
  23.             ListView1.Columns.Clear()
  24.             '// Create a new Excel application
  25.             Dim excelApp As New Excel.Application()
  26.             '// Open the Excel workbook
  27.             Dim workbook As Excel.Workbook = excelApp.Workbooks.Open(txtFileName.Text)
  28.             Try
  29.                 '// เคลียร์ค่า Table/Query ของเดิมใน DataSet ก่อนใช้งานใหม่
  30.                 '// หรือหากให้เพิ่มตารางข้อมูล/คิวรี่ จากไฟล์อื่น ก็ตัดบรรทัดนี้ทิ้งออกไป
  31.                 DS = New DataSet()
  32.                 '// Loop through each worksheet in the workbook
  33.                 For Each worksheet As Excel.Worksheet In workbook.Sheets
  34.                     '// Create a new DataTable for each worksheet.
  35.                     Dim DT As New DataTable(worksheet.Name)
  36.                     cmbSheetName.Items.Add(worksheet.Name)
  37.                     '// Add columns to the DataTable.
  38.                     For col As Integer = 1 To worksheet.UsedRange.Columns.Count
  39.                         DT.Columns.Add(DirectCast(worksheet.Cells(1, col), Excel.Range).Value2.ToString())
  40.                     Next
  41.                     '// Loop through the rows and columns in the worksheet.
  42.                     For row As Integer = 2 To worksheet.UsedRange.Rows.Count
  43.                         Dim dataRow = DT.NewRow()
  44.                         For col As Integer = 1 To worksheet.UsedRange.Columns.Count
  45.                             dataRow(col - 1) = DirectCast(worksheet.Cells(row, col), Excel.Range).Value2
  46.                         Next
  47.                         DT.Rows.Add(dataRow)
  48.                     Next
  49.                     '// Add the DataTable to the DataSet.
  50.                     DS.Tables.Add(DT)
  51.                 Next
  52.             Catch ex As Exception
  53.                 '// Handle any exceptions that may occur during the process.
  54.                 MessageBox.Show("An error occurred: " & ex.Message)
  55.             Finally
  56.                 '// Close and release resources
  57.                 workbook.Close()
  58.                 excelApp.Quit()
  59.                 System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook)
  60.                 System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
  61.             End Try
  62.         End If
  63.     End Sub

  64.     ' / --------------------------------------------------------------------------------
  65.     '// เลือก WorkSheet แล้วแสดงผลข้อมูลลงใน ListView
  66.     ' / --------------------------------------------------------------------------------
  67.     Private Sub cmbSheetName_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbSheetName.SelectedIndexChanged
  68.         With ListView1
  69.             .Clear()
  70.             .View = View.Details
  71.             .GridLines = True
  72.             .FullRowSelect = True
  73.             .HideSelection = False
  74.             .MultiSelect = False
  75.         End With
  76.         Try
  77.             '/ Access the DataTable by its name.
  78.             Dim DT As System.Data.DataTable = DS.Tables(cmbSheetName.Text)
  79.             '/ Now you can work with the 'dataTable' as needed
  80.             '/ For example, you can iterate through its rows and columns
  81.             '// อ่านจำนวนหลักทั้งหมดเข้ามาก่อน
  82.             For iCol = 0 To DT.Columns.Count - 1
  83.                 ListView1.Columns.Add(DT.Columns(iCol).ColumnName)
  84.                 '// ปรับระยะความกว้างใหม่
  85.                 ListView1.Columns(iCol).Width = ListView1.Width \ (DT.Columns.Count - 1)
  86.             Next
  87.             '// อ่านข้อมูลในแต่ละแถว
  88.             For sRow = 0 To DT.Rows.Count - 1
  89.                 Dim LV As New ListViewItem
  90.                 Dim dRow As DataRow = DT.Rows(sRow)
  91.                 LV = ListView1.Items.Add(dRow.Item(0))  '// --> Primary Node
  92.                 For iCol = 1 To DT.Columns.Count - 1
  93.                     LV.SubItems.Add(dRow(iCol).ToString())
  94.                 Next
  95.             Next
  96.             ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
  97.         Catch ex As Exception
  98.             MessageBox.Show(ex.Message)
  99.         End Try
  100.     End Sub

  101.     ' / --------------------------------------------------------------------------------
  102.     ' / เหตุการณ์ Double Click Mouse บน ListView เพื่อแสดงผลข้อมูลในแถวรายการที่เลือก
  103.     ' / --------------------------------------------------------------------------------
  104.     Private Sub ListView1_DoubleClick(sender As Object, e As System.EventArgs) Handles ListView1.DoubleClick
  105.         MessageBox.Show( _
  106.             "Column 0: " & ListView1.SelectedItems(0).Text & vbCrLf & _
  107.             "Column 1: " & ListView1.SelectedItems.Item(0).SubItems(1).Text & vbCrLf & _
  108.             "Column 2: " & ListView1.SelectedItems.Item(0).SubItems(2).Text & vbCrLf & _
  109.             "Column 3: " & ListView1.SelectedItems.Item(0).SubItems(3).Text)
  110.     End Sub

  111.     Private Sub txtFileName_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtFileName.KeyPress
  112.         e.Handled = True    '// Can't keypress.
  113.     End Sub

  114.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  115.         Me.Close()
  116.     End Sub

  117.     Private Sub frmWorkSheet2ListView_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  118.         Me.Dispose()
  119.         GC.SuppressFinalize(Me)
  120.         Application.Exit()
  121.     End Sub

  122. #Region "FUNCTION"
  123.     ' / --------------------------------------------------------------------------------
  124.     ' / Get my project path
  125.     ' / AppPath = C:\My Project\bin\debug
  126.     ' / Replace "\bin\debug" with ""
  127.     ' / Return : C:\My Project\
  128.     Public Function MyPath(ByVal AppPath As String) As String
  129.         '/ MessageBox.Show(AppPath);
  130.         MyPath = AppPath.ToLower.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "").Replace("\bin\x86\release", "")
  131.         '// If not found folder then put the \ (BackSlash) or ASCII Code = 92 at the end.
  132.         '/ Return Value
  133.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  134.     End Function

  135. #End Region

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

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

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

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

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

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

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

GMT+7, 2024-4-16 21:09 , Processed in 0.298749 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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