在C++项目中把查询结果写入Excel生成xlsx文件,核心思路是借助成熟的第三方库来处理xlsx的压缩与XML结构,而不是自己从零实现。下面以常用的开源库libxlsxwriter为例,说明完整流程。

一、环境准备与库引入
libxlsxwriter是一个轻量、纯C的写xlsx库,C++项目可以直接调用。在Ubuntu下可通过包管理安装,或者从源码编译。
// Ubuntu安装示例(终端命令,非C++代码) // sudo apt-get install libxlsxwriter-dev #include <xlsxwriter.h> #include <vector> #include <string>
二、组织查询结果数据
假设我们从数据库查到了一些用户记录,先定义结构并把结果放进容器里。
struct QueryRow {
int id;
std::string name;
int age;
};
// 模拟查询返回的结果
std::vector<QueryRow> query_result = {
{1, "张三", 28},
{2, "李四", 34},
{3, "王五", 22}
};
三、创建xlsx工作簿与工作表
使用lxw_workbook_new创建 workbook,再用 workbook_add_worksheet添加 sheet。
lxw_workbook *workbook = workbook_new("output.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, "查询结果");
四、写入表头与数据行
先写表头,再遍历结果集写每一行。worksheet_write_string和worksheet_write_number分别对应文本和数字。
// 写表头
worksheet_write_string(worksheet, 0, 0, "ID", NULL);
worksheet_write_string(worksheet, 0, 1, "姓名", NULL);
worksheet_write_string(worksheet, 0, 2, "年龄", NULL);
// 写数据行
int row = 1;
for (const auto &r : query_result) {
worksheet_write_number(worksheet, row, 0, r.id, NULL);
worksheet_write_string(worksheet, row, 1, r.name.c_str(), NULL);
worksheet_write_number(worksheet, row, 2, r.age, NULL);
row++;
}
五、保存并关闭文件
最后必须调用workbook_close,否则文件不会真正写入磁盘。
workbook_close(workbook);
六、常见问题说明
- 如果生成的文件打不开,检查是否忘记调用workbook_close。
- 中文乱码一般不是库的问题,确保源码文件编码与系统一致即可。
- 需要写公式或样式时,libxlsxwriter也提供了对应接口,如worksheet_write_formula。
整体流程就是:准备库、装数据、建表、写内容、关闭保存。掌握这套方法,C++导出Excel报表就很轻松了。