前段時間忙着畢業論文,終於有時間寫博客了。
早些時候老大給我的一個任務需要對excel進行讀表操作,研究了一下c++對excel的操作。
對Excel的操作基本有com,ODBC,AD等,其中ODBC有一個封裝的庫CSpreadSheet,但它只能對2003版進行操作,不兼容2007版,然后我就找了一個收費的libxl的庫,網上有破解版,它兼容2007版,而且提供的接口非常簡單,重要的是兼容多字節的版本(網上說只兼容unicode版,我也不知道怎么回事)。
我下的是libxl-3.1.0,函數的接口和說明在官網有:http://www.libxl.com/documentation.html;
使用還是老樣子 libxl.h , libxl.lib , libxl.dll 三個文件
下面直接上例子: //控制台,mfc庫(因為我要對CString進行操作)
// ExcelTest.cpp : 定義控制台應用程序的入口點。 #include "stdafx.h" #include <Windows.h> #include"libxl.h" #pragma comment (lib,"libxl.lib") #include"ExcelTest.h" using namespace std; using namespace libxl; #define DLLCLASS_EXPORTS //中文的內容讀出來后要進行編碼的轉換,這個為轉換函數:wchar_t to char char *w2c(char *pcstr,const wchar_t *pwstr, size_t len) { int nlength=wcslen(pwstr); //獲取轉換后的長度 int nbytes = WideCharToMultiByte( 0, 0, pwstr, nlength, NULL,0,NULL, NULL ); if(nbytes>len) nbytes=len; // 通過以上得到的結果,轉換unicode 字符為ascii 字符 WideCharToMultiByte( 0,0, pwstr, nlength, pcstr, nbytes, NULL, NULL ); return pcstr ; } void myDllFunc(char *destStr) { libxl::IBookT<wchar_t>* book; bool retLoad; int i=0; cin>> i; if(i!=0) { book = xlCreateBookW(); retLoad=book->load(L"E:\\代碼\\ExcelTest\\Debug\\3.xls"); } else { book = xlCreateXMLBookW(); retLoad=book->load(L"E:\\代碼\\ExcelTest\\Debug\\1.xlsx"); } if(retLoad) { libxl::Sheet * sheet = book->getSheet(0); if(sheet){ libxl::CellType celltype = sheet->cellType(0,0); switch(celltype) { case CELLTYPE_NUMBER: { double intmy =sheet->readNum(0,0); char csNum[23]={}; sprintf(csNum,"num:%ld",intmy); cout<<csNum<<endl; break; } case CELLTYPE_STRING: { cout<<"true\n"; const wchar_t * t = sheet->readStr(0,0); char *pcstr = (char *)malloc(sizeof(char)*(2 * wcslen(t)+1)); memset(pcstr , 0 , 2 * wcslen(t)+1 ); w2c(pcstr,t,2 * wcslen(t)+1); cout<<"result:"<<pcstr<<endl; cout<<strlen(pcstr)<<endl; memcpy(destStr,pcstr,strlen(pcstr)); free(pcstr); break; } case libxl::CELLTYPE_EMPTY: cout<<"true\n"; break; } } cout<<"flag\n"; cout<<sheet->lastRow()<<endl; cout<<sheet->lastCol()<<endl; } } int main() { char myy[23]={}; while(1) myDllFunc(myy); }
隨便對它的一些接口進行了測試,大家試試就知道用法了。下面是破解版的下載地址:http://pan.baidu.com/s/1sjHIAT3