|
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 ...
มาดูโค้ดฉบับเต็มกันเถอะ ...
- Public Class frmExcel2Csv
- ' / --------------------------------------------------------------------
- ' / เลือกไฟล์ Excel ด้วยการใช้งาน ADO.Net
- 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 = "Excel Files (*.xlsx)|*.xlsx|XLS Files (*.xls)|*xls"
- .FilterIndex = 0
- .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
- ' / --------------------------------------------------------------------
- ' / Convert Excel into CSV with select worksheet.
- ' / --------------------------------------------------------------------
- Private Sub btnExcel2Csv_Click(sender As System.Object, e As System.EventArgs) Handles btnExcel2Csv.Click
- '// Trap Error
- If txtFileName.Text.Trim.Length = 0 Or txtFileName.Text.Trim = "" Then
- MessageBox.Show("Please select Excel file.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- btnExcel2Csv.Focus()
- Return
- End If
- If cmbSheetName.SelectedIndex < 0 Then
- MessageBox.Show("Please select WorkSheet.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- cmbSheetName.Focus()
- Return
- End If
- '//
- If IO.File.Exists(txtFileName.Text) Then
- Dim xlApp As Excel.Application = Nothing
- Dim xlWorkBook As Excel.Workbook = Nothing
- Dim xlWorkBooks As Excel.Workbooks = Nothing
- Dim xlWorkSheet As Excel.Worksheet = Nothing
- Dim xlWorkSheets As Excel.Sheets = Nothing
- xlApp = New Excel.Application
- xlApp.DisplayAlerts = False
- xlWorkBooks = xlApp.Workbooks
- xlWorkBook = xlWorkBooks.Open(txtFileName.Text)
- xlApp.Visible = False
- xlWorkSheets = xlWorkBook.Sheets
- '// ------------------------------------------------------------------------------------
- '// กำหนด Activate WorkSheet จากที่เราเลือก
- xlWorkSheet = CType(xlWorkSheets(cmbSheetName.Text.Replace("[ DISCUZ_CODE_0 ]quot;, "")), Excel.Worksheet)
- '// หรือใช้ Index
- 'xlWorkSheet = CType(xlWorkSheets(cmbSheetName.SelectedIndex + 1), Excel.Worksheet)
- xlWorkSheet.Activate()
- xlWorkSheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)
- '// ------------------------------------------------------------------------------------
- '// Save Excel to CSV
- Dim dlgSaveFile As New SaveFileDialog()
- With dlgSaveFile
- .Filter = "CSV File |*.csv"
- .Title = "บันทึกไฟล์ CSV"
- .DefaultExt = "csv"
- .InitialDirectory = MyPath(Application.StartupPath)
- .RestoreDirectory = True
- End With
- '// Save CSV File.
- If dlgSaveFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
- xlWorkBook.SaveAs(dlgSaveFile.FileName, FileFormat:=Excel.XlFileFormat.xlCSVWindows)
- MessageBox.Show("Save Excel to CSV file Complete.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
- End If
- xlWorkSheet = Nothing
- '//
- xlWorkBook.Close()
- xlApp.UserControl = True
- xlApp.Quit()
- '// Release Objects.
- If Not xlWorkSheets Is Nothing Then
- Marshal.FinalReleaseComObject(xlWorkSheets)
- xlWorkSheets = Nothing
- End If
- If Not xlWorkSheet Is Nothing Then
- Marshal.FinalReleaseComObject(xlWorkSheet)
- xlWorkSheet = Nothing
- End If
- If Not xlWorkBooks Is Nothing Then
- Marshal.FinalReleaseComObject(xlWorkBooks)
- xlWorkBooks = Nothing
- End If
- If Not xlWorkBook Is Nothing Then
- Marshal.FinalReleaseComObject(xlWorkBook)
- xlWorkBook = Nothing
- End If
- '// Other Method to release Object.
- Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp)
- Else
- MessageBox.Show("Failed to located!!! " & txtFileName.Text, "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Warning)
- End If
- End Sub
- Private Sub frmExcel2Csv_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- Me.CenterToScreen()
- 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
- Private Sub frmExcel2Csv_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- GC.SuppressFinalize(Me)
- Application.Exit()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ... ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|