在工作学习中,有时会需要将采集的数据生成word报表的形式,如设备可靠性检测报告,检定报告等。

本文将主要陈述如何利用Qt生成word报表。

除去必要的代码,生成word报表还需要开发人员自己创建一个word模板,关于模板的样式,根据工程需要而定,只需要将文本需要替换的地方插入书签即可,关于word模板的设置后面会进行陈述。


  • UI界面展示

说明:

  1. 前界面的①实验设备②检测温度③鉴定依据均需要后期人员输入
  2. 右侧表格中的数值,是程序预设好的,模拟实际的数据采集(使用QTableWidget创建)

  • 程序说明

TableWidget部分(右侧表格创建过程)

void Widget::table()
{tablenet = new QTableWidget(this);//指定父对象tablenet->move(400,20);//设置表格在前UI中的位置tablenet->setRowCount(5);//行数tablenet->setColumnCount(7);//列数tablenet->resize(740,200);//表格的尺寸QStringList horheader;//设置表头horheader<<"序号"<<"测量数据1"<<"测量数据2"<<"测量数据3"<<"测量数据4"<<"测量数据5"<<"测量数据6";tablenet->setHorizontalHeaderLabels(horheader);//设置表头(横)tablenet->horizontalHeader()->setFixedHeight(30); //设置表头的高度为25tablenet->verticalHeader()->hide();for(int row=0;row<5;row++)//序号{tablenet->setItem( row,0,new QTableWidgetItem( number[row] ));}//随便插入一些数据for(int i=0;i<5;i++){for(int j=1;j<7;j++){tablenet->setItem(i,j,new QTableWidgetItem(data[i][j-1]));//qDebug()<<exsheet[i][j];}}//tablenet->setItem(3,3,new QTableWidgetItem(3));tablenet->show();}

生成WORD报表

void Widget::on_pushButton_clicked()
{//QString path =QFileDialog::getOpenFileName(this,"打开","../","word(*doc)");QString path="C://Users//Administrator//Desktop//QT TEXT//words//new测试.doc";//路径从\改成//,此处为论文模板所在路径if(path.isEmpty()==false){QFile file(path);QAxObject *words= new QAxObject(this);//定义一个指针words->setControl("word.Application");//指向com文件类型setControlwords->setProperty("Visible",false);//设置是否提示或者显示对话框setPropertyQAxObject *workbooks = words->querySubObject("Documents");//获取工作簿(excel文件)集合querySubObjectworkbooks->dynamicCall("Add(QString)", path);//链接到具体的文件dynamicCall//path至关重要,获取excel文件的路径//打开一个word文件,获取文档QAxObject *workbook = words->querySubObject("ActiveDocument");//获取word中已经有数值的区域querySubObject/********修改一个位置的内容*********/QString sLabel="设备";//此处必须为文档中被标记为书签的内容,下面语句的意思就是确定书签的位置:QAxObject *pBookmark = workbook->querySubObject("Bookmarks(QString)",sLabel);//找到活跃区域内的书签querySubObject//就是把书签内容直接给你替换了QString sText=ui->device->toPlainText();//此处为替换内容pBookmark->dynamicCall("Select(void)");//选中要选中的区域pBookmark->querySubObject("Range")->setProperty("Text",sText);//进行替换操作/********修改一个位置的内容*********/QString tLabel="温度";//此处必须为文档中被标记为书签的内容,下面语句的意思就是确定书签的位置:qDebug()<<"";QAxObject *tBookmarks = workbook->querySubObject("Bookmarks(QString)",tLabel);//找到活跃区域内的书签querySubObjectqDebug()<<"";//就是把书签内容直接给你替换了QString tText=ui->temp->toPlainText();//此处为替换内容tBookmarks->dynamicCall("Select(void)");//选中要选中的区域tBookmarks->querySubObject("Range")->setProperty("Text",tText);//进行替换操作
\/********修改一个位置的内容*********/QString mLabelt="方法";//此处必须为文档中被标记为书签的内容,下面语句的意思就是确定书签的位置:QAxObject *mBookmarks = workbook->querySubObject("Bookmarks(QString)",mLabelt);//找到活跃区域内的书签querySubObject//就是把书签内容直接给你替换了QString mText=ui->method->toPlainText();//此处为替换内容mBookmarks->dynamicCall("Select(void)");//选中要选中的区域mBookmarks->querySubObject("Range")->setProperty("Text",mText);//进行替换操作*/qDebug()<<"方法";//半自动方式修改word中的表格QString sheetfrist = "数据";for(int i=1;i<6;i++){for(int j=1;j<7;j++){QString addrow=QString("%1").arg(i);QString addcolum=QString("%1").arg(j);//整包QString sheetlabel = QString("%1%2%3").arg(sheetfrist).arg(addrow).arg(addcolum);//qDebug()<<sheetlabel;QAxObject *sheetdata = workbook->querySubObject("Bookmarks(QString)",sheetlabel);QString sheettext=tablenet->item(i-1,j)->text();//此处为替换内容,必须要加入.text().这样返回值才会正确sheetdata->dynamicCall("Select(void)");//选中要选中的区域sheetdata->querySubObject("Range")->setProperty("Text",sheettext);//进行替换操作}}QString sheethead = "序号";for(int j=1;j<6;j++){QString addrowhead=QString("%1").arg(j);QString sheetheadnumber = QString("%1%2").arg(sheethead).arg(addrowhead);QAxObject *sheethead = workbook->querySubObject("Bookmarks(QString)",sheetheadnumber);QString sheettexthead=tablenet->item(j-1,0)->text();//此处为替换内容sheethead->dynamicCall("Select(void)");//选中要选中的区域sheethead->querySubObject("Range")->setProperty("Text",sheettexthead);//进行替换操作}//表头等内容都是设置好的,直接替换就完事儿了/*****保存*******/QString pathsave = QFileDialog::getSaveFileName(this,"Save","../","word(*doc)");if(pathsave.isEmpty()==true){return;}workbook->dynamicCall("SaveAs(const QString&))",QDir::toNativeSeparators(pathsave));//words->setProperty("DisplayAlerts", true);//含有保存的功能,但是无法获得保存的路径,不容易进行下一步操作workbook->dynamicCall("Close(bool)", true);words->dynamicCall("Quit()");delete workbook;delete words;file.close();/*if(QMessageBox::question(this,"完成","文件已经导出,是否需要打开",QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes){QDesktopServices::openUrl(QUrl("file:///"+QDir::toNativeSeparators(pathsave)));//qDebug()<<"123";}*/QMessageBox::warning(this,"完成","文件已经保存",QMessageBox::Yes);}

  • WORD部分准备

要完成生成word报表的程序,最重要的一步就是你需要一个提前设置好的word模板。

以下是模板的整体预览

其中有几个部分需要注意:

  1. 书签的设置

在内容需要的部分,插入书签,拿本模板为样例:

仪器名称://这个是需要人员输入的,其内容是不固定的,需要后期输入,所以在“仪器名称”后面的横线上添加书签

选择任意文本进行输入,本文选择的是【设备】,之后选中文本

插入——书签

即可。


  • 效果展示

界面设置如图(示例)

点击生成

选择保存路径

 打开文件 

替换完成。


  • 总结

关于word表格的绘制,是开发人员在word模板中提前绘制好的。

表格的绘制也可以通过Qt的代码实现,此部分仍有待学习。

Qt:如何生成word报表相关推荐

  1. word模板生成word报表文档

    主要功能为根据word模板生成word报表文档,注意引用Interop.Word.dll; 首先要生成word程序对象 Word.Application app = new Word.Applicat ...

  2. apache poi使用例_使用java Apache poi 根据word模板生成word报表例子

    [实例简介] 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持. 使用说明:https://b ...

  3. 使用java Apache poi 根据word模板生成word报表

    使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...

  4. POI利用word模板动态生成word报表以及动态生成word表格

    目录 核心依赖 动态表格 测试类 工具类 动态数据 测试类 工具类 核心依赖 <dependency><groupId>org.apache.poi</groupId&g ...

  5. SpringCloud之利用FTL生成Word报表并下载

    1.首先,新建一个word文档:里面写需要下载的东西 2.编辑完后,另存为xml格式(不用管xml里面是什么),然后将后缀名xml改为ftl 3.这个ftl就是在Java代码中可生成word的模板文件 ...

  6. 【QT】word文档操作实例——根据word模板生成word报表

    文章目录 引言 一.word模板准备 二.WordDemo实现 1.mainwindow.ui 2.mainwindow.h 3.mainwindow.cpp 三.实现效果 引言 在QT5.3中,在. ...

  7. java使用Apache poi根据word模板生成word报表(增加插入符号、控制分页功能)

    原文链接:https://blog.csdn.net/u012775558/article/details/79678701 根据原代码新增了插入符号和控制分页功能.改了类名,一些方法,新增一个符号类 ...

  8. python自动生成word报表之使用win32com插入自带可编辑的图表

    解决问题 在做word报告自动生成过程中,想使用python向word中插入office自带的可以编辑的图表,查看python-docx v0.8.10文档还未实现该功能,考虑使用win32com. ...

  9. C#根据word模板生成word表格报表文档

    主要功能为根据word模板生成word报表文档,注意引用Interop.Word.dll; 首先要生成word程序对象 Word.Application app = new Word.Applicat ...

  10. Qt使用html生成word文档

    Qt使用html生成word文档 零.前言 一.效果图 二.核心代码 零.前言 项目中要用到把一些图片和一些报告保存为word文件,今天研究了一下,主要是使用html方法保存为word文档,这对htm ...

最新文章

  1. 关注,粉丝关系的数据库设计
  2. ODI中web service介绍
  3. Got a packet bigger than 'max_allowed_packet' bytes
  4. 你真的知道怎么实现一个延迟队列吗 ?
  5. 如何编写高性能的C#代码(四)字符串的另类骚操作
  6. python爬虫定时运行_python 每天如何定时启动爬虫任务
  7. MuPlayer『百度音乐播放内核』
  8. linux下查找文件、排序、查看文件内容
  9. C++ STL 整理
  10. java公路中轴_技术帖 自行车中轴的种类 入门车友请细读
  11. 音乐指纹识别(一):音乐波形
  12. 二甲苯酚的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. java自定义lock锁
  14. JavaScript整理
  15. 英文版sketch如何转为中文版?sketch英文转为中文教程!
  16. redis哨兵模式(docker)
  17. java项目-第127期SpringBoot+vue的智慧养老手表管理系统-java毕业设计_计算机毕业设计
  18. HTML制作注册页面
  19. php 实现群发表结构,利用php怎么实现一个微信公众号无限群发功能
  20. python猪脸识别_没想到,这是一家AI公司

热门文章

  1. vue项目中,使用require动态加载本地图片报错找不到模块
  2. osm数据导入mysql_导入OSM数据至PostgreSQL数据库
  3. key位置 win10生成的ssh_WIN 10生成SSH密钥教程
  4. PicoNeo3开发VR项目
  5. [CF106C]Buns -多重背包
  6. python-QQ群扫码登录(QQ群验证)
  7. LWC 67: 764. Largest Plus Sign
  8. html制作3d动画效果,【分享】HTML5的Canvas制作3D动画效果分享
  9. 金融级湖仓一体架构——SequoiaDB巨杉数据库初探
  10. Mint-Ui安装及使用办法