Qt:如何生成word报表
在工作学习中,有时会需要将采集的数据生成word报表的形式,如设备可靠性检测报告,检定报告等。
本文将主要陈述如何利用Qt生成word报表。
除去必要的代码,生成word报表还需要开发人员自己创建一个word模板,关于模板的样式,根据工程需要而定,只需要将文本需要替换的地方插入书签即可,关于word模板的设置后面会进行陈述。
- UI界面展示
说明:
- 前界面的①实验设备②检测温度③鉴定依据均需要后期人员输入
- 右侧表格中的数值,是程序预设好的,模拟实际的数据采集(使用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模板。
以下是模板的整体预览
其中有几个部分需要注意:
- 书签的设置
在内容需要的部分,插入书签,拿本模板为样例:
仪器名称://这个是需要人员输入的,其内容是不固定的,需要后期输入,所以在“仪器名称”后面的横线上添加书签
选择任意文本进行输入,本文选择的是【设备】,之后选中文本
插入——书签
即可。
- 效果展示
界面设置如图(示例)
点击生成
选择保存路径
打开文件
替换完成。
- 总结
关于word表格的绘制,是开发人员在word模板中提前绘制好的。
表格的绘制也可以通过Qt的代码实现,此部分仍有待学习。
Qt:如何生成word报表相关推荐
- word模板生成word报表文档
主要功能为根据word模板生成word报表文档,注意引用Interop.Word.dll; 首先要生成word程序对象 Word.Application app = new Word.Applicat ...
- apache poi使用例_使用java Apache poi 根据word模板生成word报表例子
[实例简介] 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持. 使用说明:https://b ...
- 使用java Apache poi 根据word模板生成word报表
使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...
- POI利用word模板动态生成word报表以及动态生成word表格
目录 核心依赖 动态表格 测试类 工具类 动态数据 测试类 工具类 核心依赖 <dependency><groupId>org.apache.poi</groupId&g ...
- SpringCloud之利用FTL生成Word报表并下载
1.首先,新建一个word文档:里面写需要下载的东西 2.编辑完后,另存为xml格式(不用管xml里面是什么),然后将后缀名xml改为ftl 3.这个ftl就是在Java代码中可生成word的模板文件 ...
- 【QT】word文档操作实例——根据word模板生成word报表
文章目录 引言 一.word模板准备 二.WordDemo实现 1.mainwindow.ui 2.mainwindow.h 3.mainwindow.cpp 三.实现效果 引言 在QT5.3中,在. ...
- java使用Apache poi根据word模板生成word报表(增加插入符号、控制分页功能)
原文链接:https://blog.csdn.net/u012775558/article/details/79678701 根据原代码新增了插入符号和控制分页功能.改了类名,一些方法,新增一个符号类 ...
- python自动生成word报表之使用win32com插入自带可编辑的图表
解决问题 在做word报告自动生成过程中,想使用python向word中插入office自带的可以编辑的图表,查看python-docx v0.8.10文档还未实现该功能,考虑使用win32com. ...
- C#根据word模板生成word表格报表文档
主要功能为根据word模板生成word报表文档,注意引用Interop.Word.dll; 首先要生成word程序对象 Word.Application app = new Word.Applicat ...
- Qt使用html生成word文档
Qt使用html生成word文档 零.前言 一.效果图 二.核心代码 零.前言 项目中要用到把一些图片和一些报告保存为word文件,今天研究了一下,主要是使用html方法保存为word文档,这对htm ...
最新文章
- 关注,粉丝关系的数据库设计
- ODI中web service介绍
- Got a packet bigger than 'max_allowed_packet' bytes
- 你真的知道怎么实现一个延迟队列吗 ?
- 如何编写高性能的C#代码(四)字符串的另类骚操作
- python爬虫定时运行_python 每天如何定时启动爬虫任务
- MuPlayer『百度音乐播放内核』
- linux下查找文件、排序、查看文件内容
- C++ STL 整理
- java公路中轴_技术帖 自行车中轴的种类 入门车友请细读
- 音乐指纹识别(一):音乐波形
- 二甲苯酚的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- java自定义lock锁
- JavaScript整理
- 英文版sketch如何转为中文版?sketch英文转为中文教程!
- redis哨兵模式(docker)
- java项目-第127期SpringBoot+vue的智慧养老手表管理系统-java毕业设计_计算机毕业设计
- HTML制作注册页面
- php 实现群发表结构,利用php怎么实现一个微信公众号无限群发功能
- python猪脸识别_没想到,这是一家AI公司
热门文章
- vue项目中,使用require动态加载本地图片报错找不到模块
- osm数据导入mysql_导入OSM数据至PostgreSQL数据库
- key位置 win10生成的ssh_WIN 10生成SSH密钥教程
- PicoNeo3开发VR项目
- [CF106C]Buns -多重背包
- python-QQ群扫码登录(QQ群验证)
- LWC 67: 764. Largest Plus Sign
- html制作3d动画效果,【分享】HTML5的Canvas制作3D动画效果分享
- 金融级湖仓一体架构——SequoiaDB巨杉数据库初探
- Mint-Ui安装及使用办法