QT学习:Qt对Office的基本读写
Excel软件具有完善的电子表格处理和计算功能,可在表格特定行列的 单元格上定义公式,对其中的数据进行批量运算处理,用Qt操作Excel 可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能 就能极大地减轻Qt程序本身的计算负担。Word是最为常用的办公软 件,很多日常工作资料都是以Word文档格式保存的。用Qt既可以对 Word中的文字也可以对表格中的信息进行读写。
下面通过一个例子详细讲解Qt对Excel和Word 的基本读写操作。
一、程序界面
创建一个Qt桌面应用程序项目,项目名称为OfficeHello,为了方便对比Qt对两种不同类型文档的 操作,设计程序界面,Qt对Office基本读写程序界面如图所示:
分别用两个分组框(QGroupBox)演示对相同文字内容的读写功能。界面上各控件我们都用数字序号 ①,②,③,…标注,其名称、类型及属性设置见下图:
二、全局变量及方法
为了提高程序代码的使用效率,通常建议将程序中公用的Office对象的句柄声明为全局变量,定义在项目.h头文件中。 后面实现具体读写功能的代码皆在 mainwindow.cpp源文件中。
mainwindow.h头文件的代码如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
#include <QAxObject> //访问Office对象类
namespace Ui {class MainWindow;
}
class MainWindow : public QMainWindow
{Q_OBJECT
public:explicit MainWindow(QWidget *parent = 0);~MainWindow();
private slots:void on_writeExcelPushButton_clicked(); //写Excel按钮单击事件槽void on_readExcelPushButton_clicked(); //读Excel按钮单击事件槽void on_writeWordPushButton_clicked(); //写Word按钮单击事件槽void on_readWordPushButton_clicked(); //读Word按钮单击事件槽
private:Ui::MainWindow *ui;QAxObject *myexcel; //Excel应用程序指针QAxObject *myworks; //工作簿集指针QAxObject *workbook; //工作簿指针QAxObject *mysheets; //电子表格集指针//QAxObject *myword; //Word应用程序指针QAxObject *mydocs; //文档集指针QAxObject *document; //文档指针QAxObject *paragraph; //文本段指针
};
#endif // MAINWINDOW_H
三、对Excel的读写
对电子表格的基本读写,在构造方法中添加如下代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
myexcel = new QAxObject("Excel.Application");
myworks = myexcel->querySubObject("WorkBooks");
//获取工作簿集
myworks->dynamicCall("Add"); //添加工作簿
workbook = myexcel->querySubObject("ActiveWorkBook"); //获取当前活动工作簿
mysheets = workbook->querySubObject("Sheets"); //获取电子表格集
}
写Excel的事件方法代码:
void MainWindow::on_writeExcelPushButton_clicked()
{
mysheets->dynamicCall("Add"); //添加一个表
QAxObject *sheet = workbook->querySubObject("ActiveSheet"); //指向当前活动表格
sheet->setProperty("Name", "我爱Qt"); //给表格命名
QAxObject *cell = sheet->querySubObject("Range(QVariant, QVariant)", "C3"); //指向C3单元格
QString inStr = ui->InExcelLineEdit->text();
cell->dynamicCall("SetValue(const QVariant&)", QVariant(inStr)); //向单元格写入内容
sheet = mysheets->querySubObject("Item(int)", 2); //指向第二个表格
sheet->setProperty("Name", "Hello Qt");
cell = sheet->querySubObject("Range(QVariant, QVariant)", "B5");
cell->dynamicCall("SetValue(const QVariant&)", QVariant("Hello!I love Qt."));
workbook->dynamicCall("SaveAs(const QString&)", "d:\\Qt\\office\\我爱 Qt5.xls"); //保存Excel
workbook->dynamicCall("Close()");
myexcel->dynamicCall("Quit()");
QMessageBox::information(this, tr("完毕"), tr("Excel工作表已保存。"));
ui->writeExcelPushButton->setEnabled(false);
ui->readExcelPushButton->setEnabled(true);
}
读Excel的事件方法代码:
void MainWindow::on_readExcelPushButton_clicked()
{
myexcel = new QAxObject("Excel.Application");
myworks = myexcel->querySubObject("WorkBooks");
myworks->dynamicCall("Open(const QString&)", "d:\\Qt\\office\\我爱 Qt5.xls"); //打开Excel
workbook = myexcel->querySubObject("ActiveWorkBook");
mysheets = workbook->querySubObject("WorkSheets");
QAxObject *sheet = workbook->querySubObject("Sheets(int)", 1);
QAxObject *cell = sheet->querySubObject("Range(QVariant, QVariant)", "C3");
QString outStr = cell->dynamicCall("Value2()").toString();//读出C3单元格内容
ui->OutExcelLabel->setText(outStr);
sheet = workbook->querySubObject("Sheets(int)", 2);
//定位到第二张表
cell = sheet->querySubObject("Range(QVariant, QVariant)", "B5");
outStr = cell->dynamicCall("Value2()").toString();
//读出B5单元格内容
workbook->dynamicCall("Close()");
myexcel->dynamicCall("Quit()");
QMessageBox::information(this, tr("消息"), outStr);
ui->writeExcelPushButton->setEnabled(true);
ui->readExcelPushButton->setEnabled(false);
}
程序运行后,单击“写入”按钮,弹出消息框提示Excel工作表已保存,即说明界面文本框里的文字 “我爱最新的 Qt 5.11”已成功写入Excel表格,为试验英文语句的读写,程序在后台还往Excel另一张表中 写入了一句“Hello!I love Qt.”。写入完成后,原“写入”按钮变为不可用,“读出”按钮则变为可用。 单击“读出”按钮,标签框中会输出刚刚写入保存的Excel单元格内容(“我爱最新的 Qt 5.11”),同时弹出消息框显示另一句英文文本“Hello!I love Qt.”,如下图所示:
该程序在计算机d:\Qt\office\路径下生成了一个名为“我爱Qt5.xls”的Excel文件,打开后可看到之前 Qt写入Excel表格的内容,如图所示:
四、对Word的读写
用Qt对Word文档进行最简单的基本读写操作,在构造方法中添加代码如下:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
...
myword = new QAxObject("Word.Application");
mydocs = myword->querySubObject("Documents"); //获取文档集
mydocs->dynamicCall("Add(void)"); //添加一个文档
document = myword->querySubObject("ActiveDocument"); //指向当前活动文档
paragraph = myword->querySubObject("Selection"); //指向当前选中文本
}
写Word的事件方法代码:
void MainWindow::on_writeWordPushButton_clicked()
{
QString inStr = ui->InWordLineEdit->text();
paragraph->dynamicCall("TypeText(const QString&)", inStr);//写入从界面文本框获取的文本
paragraph->dynamicCall("TypeText(const QVariant&)",QVariant("\nHello!I love Qt.")); //写入指定的文本
document->dynamicCall("SaveAs(const QString&)","d:\\Qt\\office\\我爱 Qt5.doc"); //保存文档
delete paragraph;
paragraph = nullptr;
document->dynamicCall("Close()");
myword->dynamicCall("Quit()");
QMessageBox::information(this, tr("完毕"), tr("Word文档已保存。"));
ui->writeWordPushButton->setEnabled(false);
ui->readWordPushButton->setEnabled(true);
}
读Word的事件方法代码:
void MainWindow::on_readWordPushButton_clicked()
{
myword = new QAxObject("Word.Application");
mydocs = myword->querySubObject("Documents"); //获取文档集
mydocs->dynamicCall("Open(const QString&)","d:\\Qt\\office\\我爱 Qt5.doc"); //打开文档
document = myword->querySubObject("ActiveDocument"); //指向活动文档
paragraph = document->querySubObject("Range()"); //指向当前文本
QString outStr = paragraph->property("Text").toString();//读出文本
ui->OutWordLabel->setText(outStr.split("H").at(0));
paragraph = document->querySubObject("Range(QVariant, QVariant)", 14, 30);
outStr = paragraph->property("Text").toString();
delete paragraph;
paragraph = nullptr;
document->dynamicCall("Close()");
myword->dynamicCall("Quit()");
QmessageBox::information(this, tr("消息"), outStr);
ui->writeWordPushButton->setEnabled(true);
ui->readWordPushButton->setEnabled(false);
}
运行效果 与上面Excel读写操作类同,运行程序的输出效果如图所示:
该程序在计算机d:\Qt\office\路径下生成了一个名为“我爱 Qt5.doc”的Word文档,打开后可看到之前Qt写入Word文档中的文字,如下图所示:
QT学习:Qt对Office的基本读写相关推荐
- Python QT学习——Qt Designer(二)
QT学习 文章目录 QT学习 一.Qt Designer 简介 二.使用方法 三.动态加载UI文件 一.Qt Designer 简介 QT程序界面的 一个个窗口.控件,就是像上面那样用相应的代码创建出 ...
- QT学习——Qt工具介绍,Qt助手使用,第一个Qt程序,Qt字符串和字符编码
一.Qt主要工具介绍 1)qt助手(assistant) 2)qt构建器(qmake) 3)qt设计师(designer) 4)qt转换器(uic) 5)qt资源编译器(rcc) 6)qt元对象编译器 ...
- Qt学习之路(56): 二进制文件读写
今天开始进入 Qt 的另一个部分:文件读写,也就是 IO.文件读写在很多应用程序中都是需要的.Qt 通过 QIODevice 提供了IO的抽象,这种设备(device)具有读写字节块的能力.常用的IO ...
- Qt学习笔记之文件处理
Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...
- QT学习笔记(九):遍历容器-迭代器(iterators)
QT学习笔记(九):遍历容器-迭代器(iterators) 遍历容器 : 1.Jave风格: 2.STL风格: 3.foreach 关键字: 遍历容器 : 遍历一个容器可以使用迭代器(iterator ...
- Qt学习之Qt基础入门(下)
1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...
- QT学习笔记之对话框
QT学习笔记之对话框 对话框是一种用户界面(窗口),它的主要功能是输出信息和接收用户的输入.在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互. 1) 模式对话框:用户只能与 ...
- 《Qt 学习之路 2》
Home / Qt 学习之路 2 / <Qt 学习之路 2>目录 <Qt 学习之路 2>目录 序 Qt 前言 Hello, world! 信号槽 自定义信号槽 Qt 模块简介 ...
- QT学习笔记(摘抄)
QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...
最新文章
- # POJ-1979(BFS)
- H5 Canvas刮刮乐
- java 将查询到的值 存下_MyBatis3.x 从入门到精通(六)查询
- python def return 文件_python基础-文件处理与函数
- java类验证和装载顺序_JVM类加载过程分析及验证
- mysql 慢查询日志的作用_MySQL慢查询日志的作用和开启
- elasticsearch使用优化备忘
- Item9:总是要改写toString
- “一边熬夜一边求不要猝死”,90后养生朋克指南,条条扎心!
- LeetCode【11--盛水最多的容器】LeetCode【12 -- 整数转罗马数字】
- 表达式计算器类的设计4(面向对象的表达式计算器7)
- Java程序中调用Python脚本的方法
- M1 macbook安装jdk
- JAVA简单聊天室的实现
- 苹果笔记本装win7_小白“复活记”,十多年前的MacBook,曲折安装Win7
- js将数字的金额转换成中文大写金额
- 按键精灵 获取某网站服务器时间,按键精灵如何获得网络时间的毫秒
- JAVA初学习(三)(数组和面向对象)
- AGV、IGV、RGV这三者之间的区别浅析
- css解决图片缩小变模糊问题
热门文章
- 如何搭建AIoT智能对话交互系统:技术解析和实操分享
- 做 NLP 算法研究,去大公司还是创业公司?
- Transformer的七十二变
- PW Live 直播 | 清华大学博士生岂凡超:义原知识库的应用和扩充
- filter函数的用法_JavaScript中forEach和filter的用法和原理
- python将字典导入excel_python将字典列表导出为Excel文件的方法
- java.lang.IllegalStateException: PathVariable/RequestParam annotation was empty on param 0.
- python function terminated_calibre 打不开也转不了 并且出现错误 mobi转docx
- java耗时操作阻塞_springboot~高并发下耗时操作的实现
- findfirstfile函数为什么不能遍历doc_编程之美:IO多路复用——记性不好的poll函数...