thongkorn โพสต์ 2017-12-25 01:43:48

[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 หรือเป็นมิตรต่อผู้ใช้ตามไปด้วย ทำให้แทบไม่ต้องฝึกฝนอบรมผู้ใช้งานเพิ่มเติมใดๆเลย แต่มันก็ขึ้นอยู่กับเราจะออกแบบให้โปรแกรมมันเดินไปทิศทางไหนด้วยล่ะครับ ... สวัสดี


ดาวน์โหลดโค้ดโปรแกรมฉบับเต็มได้ที่นี่ ...

sonthaya โพสต์ 2018-6-7 12:07:15

สวัสดีครับ ผม อยากได้ เอาข้อมูลออกเป้น 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

thongkorn โพสต์ 2018-6-7 16:12:55

ใช้การ Save ออก Excel แทนครับผม
x = fp.SaveExcel2007File("C:\SampleExcelFile.xls", "", DataOnly, "C:\LogXLS.txt")

sonthaya โพสต์ 2018-6-7 17:54:27

แก้ไขครั้งสุดท้ายโดย 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

thongkorn โพสต์ 2018-6-7 22:33:06

ผมก็ทดสอบจากในโปรเจคนี้แหละครับ ... โดยใช้ 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




sonthaya โพสต์ 2018-6-8 10:55:47

thongkorn ตอบกลับเมื่อ 2018-6-7 22:33
ผมก็ทดสอบจากในโปรเจคนี้แหละครับ ... โดยใช้ FarPoint Spread เป ...

ได้ล่ะครับ ของผม farPoint Spread ไม่ update ผมโหลดของ อาจารย์ มา ดาวน์โหลดชุด Upgrade 8.0.21 จากผู้ผลิตใช้ได้แล้ว ขอบคุณครับ

thongkorn โพสต์ 2018-6-8 11:54:31

แหม ... กำลังจะโพสต์บอกอยู่แล้วเชียวครับว่าต้องปรับเวอร์ชั่นใหม่ 5555+

sontha2499 โพสต์ 2018-6-20 14:03:06

แก้ไขครั้งสุดท้ายโดย sontha2499 เมื่อ 2018-6-20 14:05

thongkorn ตอบกลับเมื่อ 2018-6-8 11:54
แหม ... กำลังจะโพสต์บอกอยู่แล้วเชียวครับว่าต้องปรับเวอร์ชั่นใหม่ 5555+
มีติดอีกนิดนึงครับ เวลาexport header มัน ไม่มา มาแต่ data ครับexport data

thongkorn โพสต์ 2018-6-21 20:48:27

ผมลองหาก็แล้ว ทดสอบก็แล้ว สรุปได้ว่าสำหรับ 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]
ดูในรูปแบบกติ: [VB6] การนำเข้าข้อมูลจากไฟล์ Excel เข้าสู่ตาราง FarPoint Spread ActiveX (COM)