libxl庫的介紹,對Excel操作封裝得很好的一個庫,兼容2007版和多字節字符(最后有破解版下載)


前段時間忙着畢業論文,終於有時間寫博客了。

 

早些時候老大給我的一個任務需要對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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM