Qt不仅可读取Word中的文本 , 还能对存有大量信息的表格数据进行读取和查询 。本文实例完整地演示对Word中表格遍历、读取指定行和列信息的通行方式 。
1.数据准备
事先准备好“1977-2019历年全国高考人数和录取率统计.docx”数据表,存放在“D:Temp”下待用,如下图所示 。
2.程序界面
创建Qt桌面应用程序项目,项目名称为“WordReadTable” 。设计程序界面 , 数据检索程序界面如图所示 。
3.全局变量及方法
“mainwindow.h”头文件的代码如下:#include #include class MainWindow : public QMainWindow{ Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots: void on_btnQuery_clicked();private:Ui::MainWindow *ui;QAxObject *myword; //Word应用程序指针QAxObject *mydocs; //文档集指针QAxObject *document; //文档指针QAxObject *mytable; //文档中的表指针}; 4.功能实现
实现具体功能的代码皆在“mainwindow.cpp”源文件中 , 如下:MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ui->setupUi(this);myword = new QAxObject("Word.Application"); //创建 Word 应用程序对象mydocs = myword->querySubObject ("Documents"); //获取文档集mydocs->dynamicCall("Open(const QString&)", "D:\Temp\1977-2019历年全国高考人数和录取率统计.docx"); //打开文档document = myword->querySubObject("ActiveDocument"); //当前活动文档mytable = document->querySubObject("Tables(int)", 1); //第一张表int rows = mytable->querySubObject("Rows")->dynamicCall("Count").toInt();//获取表格总行数for(int i=2; iquerySubObject("Cell(int,int)",i,1);//读取第一列年份信息if(headcol == NULL) continue;QString yearStr = headcol->querySubObject("Range")->property("Text").toString();ui->comboYear->addItem(yearStr); //载入界面上的年份列表if(i==rows) ui->comboYear->setCurrentText(yearStr);//默认显示最近年份(2019)}}MainWindow::~MainWindow(){delete ui;delete mytable;mytable=nullptr;document->dynamicCall("Close()");myword->dynamicCall("Quit()");}void MainWindow::on_btnQuery_clicked(){int rows = mytable->querySubObject("Rows")->dynamicCall("Count").toInt();for(int i=2; iquerySubObject("Cell(int,int)",i,1);if (headcol == NULL) continue;QString yearStr = headcol->querySubObject("Range")->property("Text").toString();if(ui->comboYear->currentText()==yearStr){ //以年份为关键字检索QAxObject *infocol = mytable->querySubObject("Cell(int,int)", i, 2);QString totalStr = infocol->querySubObject ("Range")->property("Text").toString();//读取当年高考人数ui->edtTotal->setText(totalStr);infocol = mytable->querySubObject("Cell(int,int)", i, 3);QString admitStr = infocol->querySubObject("Range")->property("Text").toString();//读取录取人数ui->edtAdmit->setText(admitStr);infocol = mytable->querySubObject("Cell(int,int)", i, 4);QString rateStr = infocol->querySubObject("Range")->property("Text").toString();//读取录取率ui->edtRate->setText(rateStr);break;}}} 上面的程序完整地演示了对Word中表格遍历、读取指定行和列信息的通行方式,请务必熟练掌握 。
5.运行效果
【28 Qt编程进阶:读取Word表格数据】运行程序,从下拉列表中选择年份后 , 单击“查询”按钮,程序会在Word文档的表格中读取该年高考生总人数、录取人数和录取率数据,并显示在界面上对应的栏里,如下图所示 。
————————————————
觉得有用的话请关注点赞,谢谢您的支持!
对于本系列文章相关示例完整代码有需要的朋友,可关注并在评论区留言!
