使用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、将用户名和密钥写入代码,写在调用xlCreateXMLBook
或 xlCreateBook
的位置
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 <iostream>
#include <libxl.h>
#include <string>
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 <iostream>
#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;
}
项目工程下载
项目源码工程下载