Libxl:C++的Excel读写库工具

  • C++对Excel读写操作还是比较麻烦,现有的库不多,而且功能不完善,这点超乎了我的想象。其中Libxl应该算是最全面的,但是它收费。折腾了一圈开源的,最后还是没有特别好的,还是只能尝试用收费的Libxl,但是它收费,那只能找破解的版本,破解的也比较难找,费了九牛二虎之力最后找到了,这里记录下。开源的用多了,印象加深之后,总觉得这种好东西它收费,简直天理难容。当然在这里还是希望大家尽可能的去支持正版,不要去淘宝搜了?。
  • 其实C++能够直接导出数据到xls表格,就跟写到txt一样,也比较方便,但是我使用的时候发现,用Excel打开这种直接导出来的xls表格时,会先弹窗提示。表格少的时候不要紧,但是多的话就很麻烦。更重要的是,这种表格无法被程序打开读取,例如python的xlrd、maltab的xlsread、c++的其他Excel读写库,这个非常不方便,如果你有很多分表,最后需要做数据汇总,这种情况下就无法开展。

使用

  • Libxl库的使用非常简单直观,这里不多说了,给一段代码看看就行,
    /* 输出一个数阵列到 xlsx */
    #include <iostream>
    #include <windows.h>
    #include "libxl.h"
    using namespace libxl;

    int main(int argc, const char ** argv)
    {   
        vector <vector<double>> dataSet;
        for( int i = 0; i<50 ; i++ )
        {   
            vector<double>  dataRow;
            for (int j = 0; j < 50; j++)
            {
                dataRow.push_back(j);
            }
            dataSet.push_back(dataRow);
        }
        // Book* book = xlCreateBook();     // 创建 xls
        Book* book = xlCreateXMLBook();     // 创建 xlsx
        book->setKey( "Halil Kural", "windows-2723210a07c4e90162b26966a8jcdboe" );
        Sheet* sheet = book->addSheet("sheet1");
        for( int i = 1; i<50 ; i++ )
        {
            for (int j = 0; j < 50; j++)
            {
                sheet->writeNum(i, j, dataSet[i][j]);
            }
        }       
        book->save("custom.xlsx");
        book->release();                
    }

问题

  • 在使用的时候碰到一个问题,官方库给出的example里面,字符串前使用了L符号,因为一开始没有接触过,也比较疑惑,这个L的解释说明如下,具体大家可以去百度

L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。

  • 因此在使用Libxl库的时候要注意自己项目的字符集设置,VS默认工程的字符集属性是使用多字节字符集,在使用Libxl库的时候,不需要加L,具体可以参看工程的字符集设置

工程属性 >> 常规 >> 字符集

    /* 官方例子:使用Unicode的字符集 */
    int main() 
    {   
        Book* book = xlCreateBook();
        book->setKey( L"Halil Kural", L"windows-2723210a07c4e90162b26966a8jcdboe" );
        if(book)
        {
            int f[6];
            f[0] = book->addCustomNumFormat(L"0.0");
            f[1] = book->addCustomNumFormat(L"0.00");
            f[2] = book->addCustomNumFormat(L"0.000");
        ... ...  

    /* 如字符集为:多字节字符集,则不需要L*/
    int main() 
    {   
        Book* book = xlCreateBook();
        book->setKey( "Halil Kural", L"windows-2723210a07c4e90162b26966a8jcdboe" );
        if(book)
        {
            int f[6];
            f[0] = book->addCustomNumFormat("0.0");
            f[1] = book->addCustomNumFormat("0.00");
            f[2] = book->addCustomNumFormat("0.000");
        ... ...               

下载

  • 这里给出破解版的下载地址:点击下载
标题:Libxl:C++的Excel读写库工具
链接:https://www.outblue.cc/33
来源:OutBlue Blog
说明:文章版权本站所有,欢迎转载分享,望能备注出处
THE END
分享
二维码
< <上一篇
下一篇>>