目录

  • 前言
  • 1、下载源码
  • 2、编译源码
  • 3、写Excel数据示例

前言

本文以一个示例介绍了如何使用 libxlsxwriter 开源库保存QTableWidget表格中的数据到Excel文件。libxlsxwriter 是一个C语言库,可用于将文本、数字、公式和超链接写入Excel 2007以上的excel文件中的多个工作表。它支持的特性非常丰富,如合并单元格、设置字体样式、设置单元格样式、支持图标、支持各种操作系统等,这里就不一一列举了,除此之外它唯一依赖zlib库。

1、下载源码

zlib 下载地址: https://github.com/madler/zlib
libxlsxwriter 下载地址:https://github.com/jmcnamara/libxlsxwriter

2、编译源码

这里我们使用cmake 来生成vs工程进行编译。首先编译zlib,打开cmake GUI客户端,设置好zlib源码路径和构建路径,如下图所示:

点击 【Configure】按钮配弹出如下页面,选择vs版本及目标平台,默认是32位,这里选择64位,编译器用默认选项即可。

再点击【Generate】按钮生成VS工程,点击【Open Project】打开创建的vs工程,切换到Release模式,在ALL_BUILD 工程上右键生成,等待编译完成。编译结束后打开build/Release目录可以看到生成了zlib的静态库zlibstatic.lib 和 动态库zlib 、zlib.dll。如下图所示

接下来我们编译libxlswriter,同样用cmake生成VS工程进,在cmakeGUI中设置好libxlswriter的源码根目录及build目录后,点击【Configure】按钮,在弹出的页面中选择与编译zlib相同的配置,配置结束后会提示zlib找不到,这时需要我们手动设置zlib的两个配置项,ZLIB_INCLUDE_DIR 、ZLIB_LIBRARY_RELEASE,这里我们选择zlib的静态库,配置好之后再次点击【Configure】按钮,效果如下图所示

点击【Generate】按钮生成VS工程,在【解决方案】上右键选择【批生成】菜单,在弹出的页面中勾选 ALL_BUILD的Debug和Release,然后点击生成按钮,等待编译完成。注意这里xlswriter默认生成静态库

我遇到的问题是,在工程的属性配置中没有链接zlibstatic库,导致在使用xlswriter时报zlib中对应api符号找不到的错误,如果你也遇到类似的情况,可以在这一步手动添加zlib静态库链接,如下图所示。

编译完成后在build/Release目录中看到已经生成了xlswriter的静态库。如下图所示

3、写Excel数据示例

在Qt Creator中新建excelDemo项目,在pro目录下新建libxlswriter目录,接着创建include和lib目录,将xlsxwriter.lib和include目录下的文件拷贝到libxlswriter对应目录下,如图所示


在pro文件中引入libxlswriter库,添加下面两行代码到pro文件中

INCLUDEPATH += $$PWD/libxlswriter/include
LIBS += -L$$PWD/libxlswriter/lib -lxlsxwriter

在UI文件中拖拽一个QPushButton按钮和一个QTableWidget表格控件,布局如下

当点击保存按钮时,将表格中的数据写到excel文件中,并打开保存的excel文件,我们在cpp文件中向QTableWidget添加一些测试数据,

 void MainWindow::initTableWidget()
{ui->tableWidget->horizontalHeader()->setStretchLastSection(true);QList<QStringList> dataList;QStringList rowData;rowData << "1" << tr("20220120") << tr("张三") <<tr("18");dataList.append(rowData);rowData.clear();rowData << "2" << tr("20220121") << tr("李四") <<tr("19");dataList.append(rowData);rowData.clear();rowData << "3" << tr("20220122") << tr("王五") <<tr("19");dataList.append(rowData);rowData.clear();rowData << "4" << tr("20220123") << tr("赵六") <<tr("17");dataList.append(rowData);for(int i = 0; i < dataList.size(); i++){rowData = dataList[i];ui->tableWidget->insertRow(i);for(int j = 0; j < rowData.size(); j++){QTableWidgetItem *pItem = new QTableWidgetItem(rowData[j]);ui->tableWidget->setItem(i, j, pItem);}}
}

在保存按钮的响应函数中,添加代码保存数据。


void MainWindow::slot_btnClicked()
{QString fileName = QFileDialog::getSaveFileName(this, tr("输入保存文件名称"));if(fileName.isEmpty()){return;}//lxw_workbook 代表Excel文件lxw_workbook *pWorkBook = workbook_new(fileName.toLocal8Bit().data());//lxw_worksheet 代表sheet页lxw_worksheet *pWorkSheet = workbook_add_worksheet(pWorkBook, tr("学生信息").toUtf8().data());lxw_format *pHeaderFormat = workbook_add_format(pWorkBook);format_set_bold(pHeaderFormat);format_set_align(pHeaderFormat, LXW_ALIGN_CENTER);format_set_align(pHeaderFormat, LXW_ALIGN_VERTICAL_CENTER);format_set_border(pHeaderFormat, LXW_BORDER_THIN);int row = 0;for(int i = 0; i < ui->tableWidget->columnCount(); i++){QTableWidgetItem* pHeaderItem = ui->tableWidget->horizontalHeaderItem(i);worksheet_write_string(pWorkSheet, row, i, pHeaderItem->text().toUtf8().data(), pHeaderFormat);}row++;lxw_format *pItemFormat = workbook_add_format(pWorkBook);format_set_align(pItemFormat, LXW_ALIGN_CENTER);format_set_align(pItemFormat, LXW_ALIGN_VERTICAL_CENTER);format_set_border(pItemFormat, LXW_BORDER_THIN);for(int i = 0; i < ui->tableWidget->rowCount(); i++){for(int j = 0; j < ui->tableWidget->columnCount(); j++){QTableWidgetItem* pItem = ui->tableWidget->item(i, j);worksheet_write_string(pWorkSheet, row, j, pItem->text().toUtf8().data(), pItemFormat);}row++;}lxw_error error = workbook_close(pWorkBook);if(error != LXW_NO_ERROR){qDebug() << "save excel failed!";}QFileInfo fileInfo(fileName);QString fileDirPath = fileInfo.absoluteFilePath();//打开文件所在目录QDesktopServices::openUrl(QUrl(QString("file:///%1").arg(fileDirPath)));//打开保存的Excel文件QDesktopServices::openUrl(QUrl(QString("file:///%1").arg(fileName)));}

从上面的代码可以看出libxlswriter的使用也是非常简单的。下面是程序运行效果,及导出的Excel文件打开后的效果。

以上就是本篇的所有内容了,关于libxlswriter的更多用法,可以自己研究学习,并不难。对以上内容有疑问的朋友,欢迎 留言讨论。

Qt保存Excel格式数据相关推荐

  1. linux qt写入excel文件内容,Qt 读取Excel表格数据 生成Excel表格并写入数据

    Qt 读取Excel表格数据 生成Excel表格并写入数据 Qt 读取Excel表格数据 生成Excel表格并写入数据 修改.pro文件,增加 axcontainer QT += axcontaine ...

  2. CANape数据保存excel格式的方法

    使用CANape采集的数据如果想保存为可用excel打开的文件,可按照如下方法操作: 在Graphic的图像区域,右键,选择signal values,然后选择save 选择需要的信号和时间段,点OK ...

  3. 实现Scrapy框架爬取酷狗音乐Top100名,并存储为TXT,JSON,CSV和Excel格式数据

    前言 实现Scrapy框架爬取网页数据(酷狗音乐Top100名,包括排名信息.歌手信息.歌曲名.歌曲时长) 一.创建项目 在cmd中输入: scrapy startproject kugouScrap ...

  4. Python处理示波器CSV表格数据、微软excel格式数据

    Python处理示波器CSV文件数据.微软excel文件数据 软件环境 处理示波器导出的csv表格数据 csv原始数据形式 处理代码 代码运行结果 处理Simulink导出的excel表格数据 exc ...

  5. Qt 读取Excel表格数据 生成Excel表格并写入数据

    qtxlsx读取Excel,无需本地存在excel或者wps驱动,读写操作更方便简洁. 一. 读取Excel表格 修改.pro文件,增加 axcontainer QT += axcontainer 导 ...

  6. php导出excel格式数据

    解决2个问题: 1.身份证之类的文本数据自动转为科学计数法的问题. 2.中文乱码的问题 excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格 ...

  7. js 列表对象数据 转换成 excel格式数据

    代码实现 async exportExcel() {// element-ui loading效果参数this.exportLoading = true// 获取列表数据请求 const { rows ...

  8. c#使用NPOI保存excel格式xlsx打开文件部分内容错误问题

    保存为xlsx格式时,只能使用 FileStream fsOut = File.Create(filename); 保存xls时,可以使用 FileStream fsOut = new FileStr ...

  9. Java工作引擎Jflow表单从表Excel格式数据导入

    关键词: 表单引擎从表数据导入  Java工作流引擎表单设计   开源工作流引擎数据导入 应用背景 当发起某些流程的时候需要本地批量上传一些数据到表单的列表中,这时候我们就需要创建从表,通过从表批量的 ...

最新文章

  1. android base layout - top middle bottom
  2. Xshell使用xftp传输文件,使用pure-ftpd搭建ftp服务
  3. python在中国的发展-Python未来的发展前景到底如何?
  4. 贪心算法讲解(集合覆盖问题,旅行商问题求解)
  5. 使用vi/vim编辑时按ctrl-s后客户端假死解决方法
  6. 为什么我们要做2021.NET中国开发者调研
  7. 发力企业级市场,微软Hololens开辟了一条VR新道路
  8. Matlab与高等数学
  9. 常见CSS选择器分类
  10. 安腾还是Power7——Unix服务器你该如何选?
  11. [原创][Windows] Win7安装visual c++ 2015 redistributable x64失败
  12. php 防微信照片上传,PHP仿微信多图片预览上传功能
  13. 微信消息推送之过长的文本消息拆分踩坑
  14. visa虚拟卡生成器_虚拟信用卡,额度6万!无需面签即可办理
  15. C语言题目:5-7 购物(二) (25 分)
  16. 一款很好用的软还原卡
  17. 【Swift】图片裁剪
  18. 网络原理考点之ADSL组网技术
  19. java手机飞信_手机飞信JAVA通用版 手机飞信2011通用版
  20. uniapp navigateTo跳转失效

热门文章

  1. 多项式(带余)除法学习笔记
  2. 关于网线连内网,无线连外网,内外网同时连通的方法探究
  3. 关于别名(alias)的尴尬
  4. python批量删除图片和空文件夹
  5. There is no getter for property named xxx in xxx
  6. JS 调试分析 + 字体解析(汽车之家)
  7. win10/11下wsl2安装gpu版的pytorch(避坑指南)
  8. Android 11 Bata 正式发布!闲鱼最新升级版 Flutter 技术电子书开放下载
  9. 一小段经历后的感想和自述。
  10. 2020 java设计模式之适配器模式