libxl库读取和写入excel文件

文章目录

  • 使用libxl库读写excel文件
    • 一、库下载
    • 二、复制到项目文件夹
    • 三、VS 环境配置
    • 四、Qt环境配置
    • 五、功能解密
    • 六、读取excel内容
    • 七、写入excel内容
    • 项目工程下载

使用libxl库读写excel文件

一、库下载

https://www.libxl.com/

二、复制到项目文件夹

解压,在文件里挑出三个东西:只需要复制include_cpp文件夹、lib64文件夹、libxl.dll文件(在下载的库 bin64文件夹里),至项目文件夹。

三、VS 环境配置

项目属性

  • C/C++ - 常规 - 附加包含目录:设置inclued_cpp文件夹的路径
  • 链接器 - 常规 - 附加库目录:设置lib64文件夹的路径
  • 链接器 - 输入 - 附加依赖项:填入“libxl.lib”。
  • libxl.dll复制到.exe文件路径下

四、Qt环境配置

.pro文件加入下面两句话:
LIBS += -L$$PWD -llibxl
INCLUDEPATH += $$PWD/include_cpp

其中,$$PWD 是一个Qt构建系统变量,它表示当前项目文件所在的路径。通过使用 $$PWD,可以确保正确地指定库文件的路径和包含路径。

五、功能解密

参考大佬-注册机下载地址
1、解压运行
2、随意输入用户名,生成密钥
3、将用户名和密钥写入代码,写在调用xlCreateXMLBookxlCreateBook的位置

	libxl::Book *book;
    if(excelPath.contains("xlsx")) {book = xlCreateXMLBook();}//xlCreateXMLBook  xlCreateBook
    else  {book = xlCreateBook();}

    const wchar_t * x = L"11111";//用户名
    const wchar_t * y = L"windows-xxxxxxxxxxx";//密钥区
    book->setKey(x, y);  //设置key破解

六、读取excel内容

#include 
#include 
#include 
using namespace std;
#pragma comment(lib,"libxl.lib")

int main() {
    const char * excelPath = "C:\\Users\\Admin\\Desktop\\LibXL_demo\\test.xls"; //路径
    libxl::Book* book;      
    std::string path(excelPath);
    if (path.find("xlsx") != std::string::npos) { book = xlCreateXMLBook(); }//xlCreateXMLBook-xlsx   xlCreateBook-xls
    else { book = xlCreateBook(); }
    const char* x = "11111";
    const char* y = "windows-2b202b0a0ecee90d62b7696da3p4rfga";
    book->setKey(x, y);  //设置key

    if (book->load(excelPath)) { // 加载Excel文件
        libxl::Sheet* sheet = book->getSheet(0); // 获取第一个工作表
        if (sheet) {
            int rowCount = sheet->lastRow(); // 获取行数
            int colCount = sheet->lastCol(); // 获取列数
            for (int row = 0; row <= rowCount; ++row) {
                for (int col = 0; col <= colCount; ++col) {
                    libxl::CellType cellType = sheet->cellType(row, col); // 获取单元格类型
                    if (cellType == libxl::CELLTYPE_NUMBER) {
                        double value = sheet->readNum(row, col); // 读取数字类型单元格的值
                        std::cout << value << "\t";
                    }
                    else if (cellType == libxl::CELLTYPE_STRING) {
                        const char* value = sheet->readStr(row, col); // 读取字符串类型单元格的值
                        std::cout << value << "\t";
                    }
                    else {
                        std::cout << "\t"; // 对于其他类型的单元格,输出一个制表符
                    }
                }
                std::cout << std::endl; // 换行
            }
        }
        book->release(); // 释放Book对象
    }
    return 0;
}

七、写入excel内容

#include 
#include "libxl.h"
#pragma comment(lib,"libxl.lib")
using namespace libxl;

int main(){
    Book* book = xlCreateBook();                                //创建一个XLS文件,或者xlCreateXMLBook()-创建xlsx文件
    const char* x = "11111";
    const char* y = "windows-2b202b0a0ecee90d62b7696da3p4rfga";
    book->setKey(x, y);                                         //设置key
    if (book){                                                  //是否加载Excel文件成功
        Sheet* sheet = book->addSheet("Sheet1");                //添加一个工作表
        if (sheet){
            sheet->writeStr(1, 1, "Hello, World !");            //在第二行 第二列(B列)的表格中写入字符串"Hello, World !"。程序中从0开始计数。第0行就是execl的第1行
            sheet->writeNum(2, 1, 1000);                        //在第三行 第二列(B列)的表格中写入数字 "1000"。
            sheet->writeNum(3, 1, 2000);

            Font* font = book->addFont();                       //创建一个字体对象
            font->setColor(COLOR_RED);                          //设置对象颜色
            font->setBold(true);                                //设置粗体
            Format* boldFormat = book->addFormat();             //设置字体格式指针
            boldFormat->setFont(font);                          //应用上面设置的字体
            sheet->writeFormula(6, 1, "SUM(B3:B4)", boldFormat); //用新的字体格式 在第七行 B列 写入 B3(第三行,第二列)+B4 的和

            Format* dateFormat = book->addFormat();
            dateFormat->setNumFormat(NUMFORMAT_DATE);//设置日期格式,依赖于你本机的设置
            sheet->writeNum(8, 1, book->datePack(2008, 4, 29), dateFormat);

            sheet->setCol(1, 1, 12);//设置列宽,格式等
        }
        if (book->save("C:\\Users\\Admin\\Desktop\\LibXL_demo\\example.xls")) {//保存到example.xls
            std::cout <<"完成" << std::endl;
        }
        else {
            std::cout << book->errorMessage() << std::endl;
        }
        book->release();    //释放Book对象
    }
    return 0;
}

项目工程下载

项目源码工程下载

你可能感兴趣的:(excel,c++,qt)