TLibXL for FWH utf8(Read/Write excel) 2021.12.21

xBase/clipper
回覆文章
admin
Site Admin
文章: 53
註冊時間: 2014-09-23, 10:58

TLibXL for FWH utf8(Read/Write excel) 2021.12.21

文章 admin »

眾所皆知,使用 OLE32 去產生 excel,資料量少還沒關係,資料量一大時間就跟著拉長,久到讓人受不了!

在 ansi 編碼下,filexls 是直接快速產生 excel 檔案的方法之一,
但是,當程式碼移往 utf8 編碼後,這套 library 就生不出 utf8 文字了!

測試幾套軟體,都不慎理想,後來找到一套要錢的軟體 'libXL', 參考網址: https://www.libxl.com/
這套軟體提供了讀、寫功能,樣板檔讀出來填入資料都沒問題!

範例程式碼:

代碼: 選擇全部

#include "fivewin.ch"
// #Include "libxl.ch"
func    main()
local   xBook, cName, cKey, xSheet
  cName := "xxx"
  cKey  := "windows-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  oLibXL := TLibXL():New(cName,cKey)
  // oBook := oLibXL:CreateBook() // create .xls
  oBook := oLibXL:CreateXMLBook() // create .xlsx
  
  oBook:setLocale('UTF-8')
  oBook:setDefaultFont('新細明體',12) // 設定整體字型
  //
  //if oBook:load('D:\myprog\TMPDOC\test.xlsx')
  //   msgInfo('載入成功')
  //else
  //   msgStop('載入失敗')
  //endif
  //
  oSheet=oBook:AddSheet("Sheet one(龍礱中文字)")
  oSheet:writeStr( 1, 1, "鳧雾")
  oSheet:writeStr( 2, 4, "咙驡")
  oBook:Save( "libxl_test.xlsx" ) // 另存新檔
  oBook:End()
  oLibXL:End()

  msgInfo('end')

return  NIL
請自行將 key、name 換成自己的(怎麼換?自己想辦法!)

執行結果:
圖檔

我參考別人的程式碼,將函數重新包裝成 class, 壓縮檔提供了:
libxl.dll <-- 也可以從網站下載最新版本, 目前測試的是 v3.8.8.2
test.prg <-- 範例程式
tlibxl.prg <-- class
tlibxlc.c <-- 低階呼叫,只提供 .c 編譯,不提供 .prg,原因:無良的人太多了!
libxl_test.xlsx <-- 產生的範例檔, 自己編譯成 .exe 產生出來也是這個
附加檔案
tlibxl.7z
tlibxl for bcc70 (fwh for utf8)
(1.12 MiB) 已下載 1533 次
line ID: ssbbstw
WeChat ID: ssbbstw
admin
Site Admin
文章: 53
註冊時間: 2014-09-23, 10:58

Re: TLibXL for FWH utf8(Read/Write excel)

文章 admin »

測試使用之後發現真的好用,直接買了一套,取得序號帶入,
發現新版 3.9.x 之後的序號跟以前 3.8.x 的都不一樣,
應該是作者發現外面有太多破解了! :mrgreen:

原本軟體連結: https://www.libxl.com/home.html

前先做也是發現一個問題,就是 Excel 檔案太大時(100MB),
檔案無法正常開啟,經 email 詢問作者,需要 64x 位元版的才能正常開啟,
折衷解決方法就是用 HWGUI 64x 寫一個專門讀取大檔案的功能.

其他功能大部分都能是用,產生 .xlsx/.xls 速度飛快!讚! :lol:
line ID: ssbbstw
WeChat ID: ssbbstw
admin
Site Admin
文章: 53
註冊時間: 2014-09-23, 10:58

Re: TLibXL for FWH utf8(Read/Write excel)

文章 admin »

source code:
TLibXL.prg & tlibxl.ch

https://app.box.com/s/9pwm9w9v74wo5sal4mz2ekkzu045w3im
line ID: ssbbstw
WeChat ID: ssbbstw
回覆文章