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

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

[VB.Net] การส่งออก WorkSheet ของไฟล์ Excel เพื่อบันทึกไฟล์ในรูปแบบ CSV

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

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583



CSV (Comma-Separated Value) คือ Text File สำหรับเก็บข้อมูลแบบตาราง โดยใช้จุลภาค (,) แบ่งข้อมูลในแต่ละหลัก (Column) และใช้การเว้นบรรทัดแทนการแบ่งแถว (Row) ... ตัวอย่างเช่น อันดับ, ชื่อ, นามสกุล, เพศ ... โดยปกติเรามักจะโหลดข้อมูลเข้าสู่ตารางกริดก่อน แล้วค่อยบันทึกไฟล์ให้อยู่ในรูป CSV แต่โปรเจคนี้จะเป็นการเลือกไฟล์ Excel และเลือก WorkSheet ที่ต้องการ ส่งออกไฟล์ หรือบันทึกไฟล์ให้เป็น CSV File ... อนึ่ง!!! การโหลด WorkSheet เข้ามา แอดมินใช้ ADO.Net ในการติดต่อกับ Excel เสมือนหนึ่งว่ามันเป็นไฟล์ข้อมูล จากนั้นเลือก WorkSheet (ตารางข้อมูล) โดยกำหนดให้เป็น Activate WorkSheet (WorkSheet ที่ต้องการ) จากนั้นใช้ Interop Services (ความเข้ากันได้กับรุ่นเก่า คือเป็นการใช้ COM - Component Object Model) ในการบันทึกไฟล์ CSV ...

การ Add Reference เพื่อเลือก (COM - Component Object Model) Microsoft Excel Object Library ...


Interop Services ...


มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Public Class frmExcel2Csv

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

  7.         ' / ตั้งค่าการใช้งาน Open File Dialog
  8.         With dlgOpenFile
  9.             .InitialDirectory = MyPath(Application.StartupPath)
  10.             .Title = "เลือกไฟล์ MS Excel"
  11.             .Filter = "Excel Files (*.xlsx)|*.xlsx|XLS Files (*.xls)|*xls"
  12.             .FilterIndex = 0
  13.             .RestoreDirectory = True
  14.         End With
  15.         '/ หากเลือกปุ่ม OK หลังจากการ Browse ...
  16.         If dlgOpenFile.ShowDialog() = DialogResult.OK Then
  17.             txtFileName.Text = dlgOpenFile.FileName
  18.             Dim strConn As String = _
  19.                 " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
  20.                 dlgOpenFile.FileName & ";" & _
  21.                 " Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
  22.             Dim Conn As New OleDbConnection(strConn)
  23.             Conn.Open()
  24.             '/ มอง WorkSheet ให้เป็นตารางข้อมูล (Table)
  25.             Dim dtSheets As DataTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
  26.             Dim drSheet As DataRow
  27.             '//
  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.     ' / Convert Excel into CSV with select worksheet.
  38.     ' / --------------------------------------------------------------------
  39.     Private Sub btnExcel2Csv_Click(sender As System.Object, e As System.EventArgs) Handles btnExcel2Csv.Click
  40.         '// Trap Error
  41.         If txtFileName.Text.Trim.Length = 0 Or txtFileName.Text.Trim = "" Then
  42.             MessageBox.Show("Please select Excel file.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  43.             btnExcel2Csv.Focus()
  44.             Return
  45.         End If
  46.         If cmbSheetName.SelectedIndex < 0 Then
  47.             MessageBox.Show("Please select WorkSheet.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  48.             cmbSheetName.Focus()
  49.             Return
  50.         End If
  51.         '//
  52.         If IO.File.Exists(txtFileName.Text) Then
  53.             Dim xlApp As Excel.Application = Nothing
  54.             Dim xlWorkBook As Excel.Workbook = Nothing
  55.             Dim xlWorkBooks As Excel.Workbooks = Nothing
  56.             Dim xlWorkSheet As Excel.Worksheet = Nothing
  57.             Dim xlWorkSheets As Excel.Sheets = Nothing
  58.             xlApp = New Excel.Application
  59.             xlApp.DisplayAlerts = False
  60.             xlWorkBooks = xlApp.Workbooks
  61.             xlWorkBook = xlWorkBooks.Open(txtFileName.Text)
  62.             xlApp.Visible = False
  63.             xlWorkSheets = xlWorkBook.Sheets
  64.             '// ------------------------------------------------------------------------------------
  65.             '// กำหนด Activate WorkSheet จากที่เราเลือก
  66.             xlWorkSheet = CType(xlWorkSheets(cmbSheetName.Text.Replace("[        DISCUZ_CODE_0        ]quot;, "")), Excel.Worksheet)
  67.             '// หรือใช้ Index
  68.             'xlWorkSheet = CType(xlWorkSheets(cmbSheetName.SelectedIndex + 1), Excel.Worksheet)
  69.             xlWorkSheet.Activate()
  70.             xlWorkSheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)
  71.             '// ------------------------------------------------------------------------------------
  72.             '// Save Excel to CSV
  73.             Dim dlgSaveFile As New SaveFileDialog()
  74.             With dlgSaveFile
  75.                 .Filter = "CSV File |*.csv"
  76.                 .Title = "บันทึกไฟล์ CSV"
  77.                 .DefaultExt = "csv"
  78.                 .InitialDirectory = MyPath(Application.StartupPath)
  79.                 .RestoreDirectory = True
  80.             End With
  81.             '// Save CSV File.
  82.             If dlgSaveFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
  83.                 xlWorkBook.SaveAs(dlgSaveFile.FileName, FileFormat:=Excel.XlFileFormat.xlCSVWindows)
  84.                 MessageBox.Show("Save Excel to CSV file Complete.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
  85.             End If
  86.             xlWorkSheet = Nothing
  87.             '//
  88.             xlWorkBook.Close()
  89.             xlApp.UserControl = True
  90.             xlApp.Quit()

  91.             '// Release Objects.
  92.             If Not xlWorkSheets Is Nothing Then
  93.                 Marshal.FinalReleaseComObject(xlWorkSheets)
  94.                 xlWorkSheets = Nothing
  95.             End If

  96.             If Not xlWorkSheet Is Nothing Then
  97.                 Marshal.FinalReleaseComObject(xlWorkSheet)
  98.                 xlWorkSheet = Nothing
  99.             End If

  100.             If Not xlWorkBooks Is Nothing Then
  101.                 Marshal.FinalReleaseComObject(xlWorkBooks)
  102.                 xlWorkBooks = Nothing
  103.             End If

  104.             If Not xlWorkBook Is Nothing Then
  105.                 Marshal.FinalReleaseComObject(xlWorkBook)
  106.                 xlWorkBook = Nothing
  107.             End If

  108.             '// Other Method to release Object.
  109.             Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp)

  110.         Else
  111.             MessageBox.Show("Failed to located!!! " & txtFileName.Text, "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  112.         End If
  113.     End Sub

  114.     Private Sub frmExcel2Csv_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  115.         Me.CenterToScreen()
  116.     End Sub

  117.     ' / ------------------------------------------------------------------
  118.     ' / ฟังค์ชั่นที่เราสามารถกำหนด Path ให้กับโปรแกรมของเราเอง
  119.     ' / Ex.
  120.     ' / AppPath = C:\My Project\bin\debug
  121.     ' / Replace "\bin\debug" with ""
  122.     ' / Return : C:\My Project\
  123.     Function MyPath(AppPath As String) As String
  124.         AppPath = AppPath.ToLower()
  125.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "")
  126.         '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
  127.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  128.     End Function

  129.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  130.         Me.Close()
  131.     End Sub

  132.     Private Sub frmExcel2Csv_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  133.         Me.Dispose()
  134.         GC.SuppressFinalize(Me)
  135.         Application.Exit()
  136.     End Sub

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

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

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

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

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

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

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

GMT+7, 2024-11-27 23:33 , Processed in 0.134055 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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