[VB6] การนำเข้าข้อมูลจากไฟล์ Excel เข้าสู่ตาราง FarPoint Spread ActiveX (COM)
http://www.g2gnet.com/webboard/images/vb6/FPImportXLSRun.pngสำหรับ FarPoint Spread ActiveX (COM) ก็ตามชื่อมันเลยคือ Spread วัตถุประสงค์หลักของ Component ตัวนี้ ก็คือการใช้งานในลักษณะแบบตารางอิเล็กทรอนิกส์ หรือ SpreadSheet นั่นคืออยู่ในรูปแบบฟอร์แมตไฟล์ Excel ดีๆนั่นเอง จุดเด่นของ FarPoint คือสามารถทำงานเป็นตารางแบบ Excel มีแถวมีหลัก มีสูตรที่ใช้คำนวณหาค่าต่างๆได้เหมือนกับ Excel นอกจากนี้มันยังทำตัวเป็นตารางกริด (Data Grid) เพื่อจัดเก็บข้อมูลทั้งแบบอ่านและเขียนข้อมูลลงเซลล์ได้อย่างง่ายดาย แต่มันมีข้อด้อยคือ การจัดกลุ่มในแบบของตารางกริดจะทำได้ยาก ดังนั้นการจะฝึกใช้งาน FarPoint เราต้องมองตัวมันเป็นเหมือนกับ Excel นะครับ โค้ดนี้จึงนำเสนอการโหลด (หรือ Import) Worksheet จาก Excel มาแสดงผลบนตัว FarPoint เอาไว้ให้ได้ศึกษากันครับ ...
ดาวน์โหลดชุดติดตั้ง FarPoint Spread ActiveX และ Update 8.0.21 ล่าสุดจากผู้ผลิต (เฉพาะสมาชิกเท่านั้น)
หน้าตาการออกแบบ และเรียกใช้งาน Component ...
http://www.g2gnet.com/webboard/images/vb6/FPImportXLSDesign.png
Project --> Components ... ให้เลือก FarPoint แบบ Unicode มาเพื่อให้แสดงผลภาษาไทยได้ถูกต้อง และ Common Dialog เพื่อการเรียกเปิดไฟล์ Excel ...
โค้ดในส่วนของการ Browse ไฟล์ Excel และทำการตรวจสอบฟอร์แมต ก่อนที่จะทำการโหลดเข้าสู่ FarPoint Spread
Private Sub cmdOpenXLS_Click()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim List() As String
Dim ListCount As Integer
Dim blnXLS As Boolean
ReDim List(1)
With dlgOpenFile
.FileName = "*.xls"
.DialogTitle = "Select Excel file to open"
.Filter = "Excel 97-2003 files (*.xls)|*.xls"
.FilterIndex = 0
.InitDir = App.Path
.Flags = cdlOFNHideReadOnly
.ShowOpen
If .FileName = "*.xls" Then Exit Sub
txtFileXLS.Text = .FileName
'/ GetExcelSheetList is a method and return boolean value.
blnXLS = fp.GetExcelSheetList(.FileName, List, ListCount, "", fpHandle, True)
End With
cmbWorkSheet.Clear
'/ Clear Rows
fp.MaxRows = 0
'/
If blnXLS Then
'/ Open XLS File
fp.OpenExcel2007File txtFileXLS.Text, "", -1, -1, ""
'/
Me.cmbWorkSheet.AddItem ("")
Dim i As Integer
For i = 0 To ListCount - 1
Me.cmbWorkSheet.AddItem (List(i))
Next
End If
ExitProc:
Exit Sub
ErrorHandler: ' Error-handling routine.
MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
Resume ExitProc
End Sub
โค้ดในการเลือก WorkSheet แล้วโหลดข้อมูลลงใน FarPoint Spread ...
Private Sub cmbWorkSheet_Click()
Dim lRet As Long
If Not cmbWorkSheet.ListIndex = 0 Then
lRet = fp.ImportExcelSheet(fpHandle, cmbWorkSheet.ListIndex - 1)
End If
End Sub
โค้ดโปรแกรมทั้งหมด ...
Option Explicit
Dim fpHandle As Integer
Private Sub cmbWorkSheet_Click()
Dim lRet As Long
If Not cmbWorkSheet.ListIndex = 0 Then
lRet = fp.ImportExcelSheet(fpHandle, cmbWorkSheet.ListIndex - 1)
End If
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub cmdOpenXLS_Click()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim List() As String
Dim ListCount As Integer
Dim blnXLS As Boolean
ReDim List(1)
With dlgOpenFile
.FileName = "*.xls"
.DialogTitle = "Select Excel file to open"
.Filter = "Excel 97-2003 files (*.xls)|*.xls"
.FilterIndex = 0
.InitDir = App.Path
.Flags = cdlOFNHideReadOnly
.ShowOpen
If .FileName = "*.xls" Then Exit Sub
txtFileXLS.Text = .FileName
'/ GetExcelSheetList is a method and return boolean value.
blnXLS = fp.GetExcelSheetList(.FileName, List, ListCount, "", fpHandle, True)
End With
cmbWorkSheet.Clear
'/ Clear Rows
fp.MaxRows = 0
'/
If blnXLS Then
'/ Open XLS File
fp.OpenExcel2007File txtFileXLS.Text, "", -1, -1, ""
'/
Me.cmbWorkSheet.AddItem ("")
Dim i As Integer
For i = 0 To ListCount - 1
Me.cmbWorkSheet.AddItem (List(i))
Next
End If
ExitProc:
Exit Sub
ErrorHandler: ' Error-handling routine.
MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
Resume ExitProc
End Sub
Private Sub Form_Load()
txtFileXLS.Text = ""
fp.MaxRows = 0
End Sub
Private Sub mnuExit_Click()
Unload Me
End Sub
Private Sub Form_Resize()
On Error Resume Next '/ <-- Form_Resize must have this for ignore any error.
'//
fraOpenExcel.Width = Me.ScaleWidth - 30
fraFP.Width = fraOpenExcel.Width
fraFP.Height = Me.ScaleHeight - fraFP.Top
fp.Move 30, 240, Me.fraFP.Width - 90, fraFP.Height - 290
cmdExit.Left = fraOpenExcel.Width - cmdExit.Width - 75
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set frmExcelImportFP = Nothing
End
End Sub
Conclusion: จะเห็นว่าการนำเข้าข้อมูลจาก Excel เพื่อนำมาแสดงผลในตัว FarPoint Spread ไม่ได้ยากเย็นเลยแม้แต่น้อย และหลังจากที่รันโปรแกรม ผู้ใช้ก็จะเสมือนทำงานอยู่บน Excel ดีๆนี่เอง นั่นก็จะทำให้เกิด Friendly Use หรือเป็นมิตรต่อผู้ใช้ตามไปด้วย ทำให้แทบไม่ต้องฝึกฝนอบรมผู้ใช้งานเพิ่มเติมใดๆเลย แต่มันก็ขึ้นอยู่กับเราจะออกแบบให้โปรแกรมมันเดินไปทิศทางไหนด้วยล่ะครับ ... สวัสดี
ดาวน์โหลดโค้ดโปรแกรมฉบับเต็มได้ที่นี่ ...
สวัสดีครับ ผม อยากได้ เอาข้อมูลออกเป้น excel แล้ว มี header ออกมาด้วย ผมทำได้ แต่ มี ข้อมูลออกมา อย่างเดียวครับ
Dim x As Boolean
' Export Excel file and set result to x
x = spd.ExportToExcel("C:\Samples\FILE.XLS", "Test Sheet 1", "C:\Samples\LOGFILE.TXT")
' Display result to user based on T/F value of x
If x = True Then
MsgBox "Export complete.", , "Result"
Else
MsgBox "Export did not succeed.", , "Result"
End If ใช้การ Save ออก Excel แทนครับผม
x = fp.SaveExcel2007File("C:\SampleExcelFile.xls", "", DataOnly, "C:\LogXLS.txt") แก้ไขครั้งสุดท้ายโดย sonthaya เมื่อ 2018-6-7 17:55
thongkorn ตอบกลับเมื่อ 2018-6-7 16:12
ใช้การ Save ออก Excel แทนครับผม
x = fp.SaveExcel2007File("C:\SampleExcelFile.xls", ...
มี error นี้ครับobject doesn't support this property or method
error ผมก็ทดสอบจากในโปรเจคนี้แหละครับ ... โดยใช้ FarPoint Spread เป็นตัวรับค่าจากอินพุท ซึ่งผมจำลองเอาด้วยการโหลดข้อมูลจาก Excel เข้ามาก่อน แล้วทำการส่งออก Export กลับไป Excel อีกรอบครับ (fp คือ FarPoint Spread ครับ)
Dim x As Boolean
x = fp.SaveExcel2007File("D:\ExcelFile.xls", "", DataOnly, "D:\LogXLS.txt")
' Export Excel file and set result to x
' Display result to user based on T/F value of x
If x Then
MsgBox "Export complete.", , "Result"
Else
MsgBox "Export did not succeed.", , "Result"
End If
thongkorn ตอบกลับเมื่อ 2018-6-7 22:33
ผมก็ทดสอบจากในโปรเจคนี้แหละครับ ... โดยใช้ FarPoint Spread เป ...
ได้ล่ะครับ ของผม farPoint Spread ไม่ update ผมโหลดของ อาจารย์ มา ดาวน์โหลดชุด Upgrade 8.0.21 จากผู้ผลิตใช้ได้แล้ว ขอบคุณครับ แหม ... กำลังจะโพสต์บอกอยู่แล้วเชียวครับว่าต้องปรับเวอร์ชั่นใหม่ 5555+ แก้ไขครั้งสุดท้ายโดย sontha2499 เมื่อ 2018-6-20 14:05
thongkorn ตอบกลับเมื่อ 2018-6-8 11:54
แหม ... กำลังจะโพสต์บอกอยู่แล้วเชียวครับว่าต้องปรับเวอร์ชั่นใหม่ 5555+
มีติดอีกนิดนึงครับ เวลาexport header มัน ไม่มา มาแต่ data ครับexport data ผมลองหาก็แล้ว ทดสอบก็แล้ว สรุปได้ว่าสำหรับ FarPoint Spread COM มันไม่น่าจะสามารถส่งค่า Header มาให้ได้ครับ แต่สำหรับเวอร์ชั่น .NET มันทำได้ ... หากต้องการจะใช้จริงๆก็ต้อง Loop เอาหลัก 0 เองครับ ตามโค้ดด้านล่างนี้ แต่มันจะช้า ไม่เหมาะกับจำนวนข้อมูลมากๆ ...
'// References อ้างอิงถึง Microsoft Excel 14.0 Object Library (MS Office 2010)
Dim ExcelApp As New Excel.Application
Dim ExcelBook As New Excel.Workbook
Dim iRow As Long
Dim iCol As Integer
'// สร้าง Object ในการเชื่อมต่อกับ Application
Set ExcelApp = CreateObject("Excel.Application")
'// เพิ่ม WorkBooks เข้าไปใหม่
Set ExcelBook = ExcelApp.Workbooks.Add
'// นับจากแถว 0 เพื่อเอา Header ของ FarPoint (หรือตารางกริดอื่นๆ)
For iRow = 0 To fp.DataRowCnt - 1
'// ระบุแถว
fp.Row = iRow
For iCol = 1 To fp.DataColCnt
'// ระบุหลัก
fp.Col = iCol
'// ให้ FarPoint ชี้อยู่ (แถว, หลัก) นำค่าออกมา
ExcelApp.Cells(iRow + 1, iCol) = fp.Value
Next
Next
' แสดงผลที่ได้ใน MS Excel
ExcelApp.Visible = True
' ปิดการใช้งานวัตถุ
Set ExcelApp = Nothing: Set ExcelBook = Nothing
หน้า:
[1]