libxl 學習之 excel 讀寫操作

秦城書生發表於2016-12-24

最近工作需要,需要讀寫 excel,在網上看了好幾個教程,尤其是基於 MFC 庫的那個,配置起來太難了,死活載入不上 worksheets 跟 workbooks 標頭檔案 ,放棄ing

無意間看到 libxl 讀單元格的例子,頓覺清新明瞭眼前一亮,研究了一下午,掌握基本操作。

libxl 下載官網:http://www.libxl.com/

libxl 函式說明:http://www.libxl.com/documentation.html

下載包裡有各類語言 example,百度上有說明,比較詳細

網址:http://wenku.baidu.com/view/8ff2d43a0912a2161479299f.html?from=search

環境配製簡單,libxl.lib、libxl.dll、include 標頭檔案直接放到工程目錄下取,沒多大。

example 上面主要是 xls 檔案,說一下 xlsx 檔案的讀寫吧。

Book * bookxml = xlCreateXMLBook();
bool  xmload = bookxml->load(path);
Sheet * sheetxml = bookxml->getSheet(0);

path 是檔案路徑,const wchar_t * 格式,如果呼叫的話需要注意格式問題,寬字元畢竟還是麻煩。

不帶漢字的路徑

string  path1;
wstring  path2(path1.begin(), path1.end());
const wchar_t * path = path2.c_str();
可以直接轉換,很方便,帶漢字比較麻煩,轉換如下:

int lenth = MultiByteToWideChar(CP_ACP, 0, filepath.c_str(), filepath.size(), NULL, 0); 
if(lenth < 0)return -2; 
wchar_t * path = new wchar_t[lenth+1]; 
if(path == NULL)return -2; 
MultiByteToWideChar(CP_ACP, 0, filepath.c_str(), filepath.size(), path, lenth); 
path[lenth] = '\0'; 
filepath 為 string 型別。

getSheet(0)表示取第一個sheet頁。

Format * xmlmat = bookxml->addFormat();
xmlmat->setBorder(BORDERSTYLE_THIN);	
xmlmat->setAlignH(ALIGNH_CENTER);
設定單元格邊框及居中

libxl::Font * xmlfont = bookxml->addFont();
xmlfont->setBold();
xmlfont->setSize(11);
設定字型大小及粗細,Size 可用,bold 無效,鬼知道什麼原因

讀寫注意寬字元

swprintf(val, L"%S ", data1[k].c_str()); 
sheetxml->writeStr(nk, k+1, val);
合併單元格

sheetxml->setMerge(height, height, 5, 6);
para1起始行,para2結束行,para3起始列,para4結束列

合併後寫的話要特別注意,如合併5,6,實際單元格6還在,寫入5或者寫入6效果相同。

差不多就這樣吧。






相關文章