QT:Qt对OFFICE的基本读写
qt 下面通过一个实例演示QT对EXCEL和word ( WPS 表格、WPS文档)基本读写操作。
创建一个QT桌面应用程序项目,项目名称为OfficeHello,为了方便对比QT对两种不同类型的文档的操作,设计程序界面,qt 对OFFICE 基本读写程序界面如图14.4所示:



项目文件添加 “axcontainer” , QT += axcontainer , 项目文件OfficeHello.pro 脚本内容:
QT += core gui axcontainer
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
TRANSLATIONS += \
OfficeHello_zh_CN.ts
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
mainwindow.h 文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
#include <QAxObject> // 访问OFFICE对象类
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_readExcelPushButton_clicked();
void on_writeExcelPushButton_clicked();
void on_readWordPushButton_clicked();
void on_writeWordPushButton_clicked();
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
源代码 mainwindow.cpp 代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
// QaxObject QaxWidget :需要 在项目文件里添加 axcontainer
ui->setupUi(this);
myexcel = new QAxObject("Excel.Application");
myworks = myexcel->querySubObject("WorkBooks"); // 获取工作簿集
myworks->dynamicCall("Add"); // 添加工作簿
workbook = myexcel->querySubObject("ActiveWorkBook"); //激活当前工作簿
mysheets = workbook->querySubObject("Sheets");// 获取电子表格集
myword = new QAxObject("Word.Application");
mydocs = myword->querySubObject("Documents"); // 获取文档集
mydocs->dynamicCall("Add(void)");//添加一个文档
document = myword->querySubObject("ActiveDocument"); //指向当前活动的文档
paragraph = myword->querySubObject("Selection"); //指向当前选中文本
ui->readExcelPushButton->setEnabled(true);
ui->readWordPushButton->setEnabled(true);
connect(ui->readExcelPushButton,SIGNAL(clicked()),this,SLOT(on_readExcelPushButton()));
connect(ui->writeExcelPushButton,SIGNAL(clicked()),this,SLOT(on_writeExcelPushButton()));
connect(ui->readWordPushButton,SIGNAL(clicked()),this,SLOT(on_readWordPushButton()));
connect(ui->writeWordPushButton,SIGNAL(clicked()),this,SLOT(on_writeWordPushButton()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_readExcelPushButton_clicked()
{
// myexcel = new QAxObject("ET.Application"); // WPS 表格
myexcel = new QAxObject("KET.Application"); //新版 WPS 表格
//myexcel = new QAxObject("Excel.Application"); // Office Excel
myworks = myexcel->querySubObject("WorkBooks");
myworks->dynamicCall("Open(cost QString&","D:\\demo\\Qt5.14\\CH12\\CH1401\\我爱QT5.14.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();
workbook->dynamicCall("Close()"); // 关闭EXCEL
myexcel->dynamicCall("Quit()"); // 退出EXCEL应用程序
QMessageBox::information(this,tr("消息"),outstr);
ui->writeExcelPushButton->setEnabled(true);
ui->readExcelPushButton->setEnabled(false);
}
void MainWindow::on_writeExcelPushButton_clicked()
{
mysheets->dynamicCall("Add"); // 添加一个表
QAxObject *sheet = workbook->querySubObject("ActiveSheet");//指向当前活动表格
sheet->setProperty("Name","我爱上Qt"); // 工作表命名为“我爱上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:\\demo\\Qt5.14\\CH12\\CH1401\\我爱QT5.14.xls");
workbook->dynamicCall("Close()");
myexcel->dynamicCall("Quit()");
QMessageBox::information(this,tr("完毕"), tr("Excel工作表已经保存。"));
ui->writeExcelPushButton->setEnabled(false);
ui->readExcelPushButton->setEnabled(true);
}
void MainWindow::on_readWordPushButton_clicked()
{
// myword = new QAxObject("WPS.Application"); // 旧版WPS
myword = new QAxObject("KWPS.Application"); // 新版 WPS
//myword = new QAxObject("Word.Application"); // Office Word
mydocs = myword->querySubObject("Documents");
mydocs->dynamicCall("Open(cost QString&","D:\\demo\\Qt5.14\\CH12\\CH1401\\我爱QT5.14.doc"); // 打开Word
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()"); // 关闭Word
myword->dynamicCall("Quit()"); // 退出Word应用程序
QMessageBox::information(this,tr("消息"),outStr);
ui->writeWordPushButton->setEnabled(true);
ui->readWordPushButton->setEnabled(false);
}
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:\\demo\\Qt5.14\\CH12\\CH1401\\我爱QT5.14.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);
}
main.cpp 代码
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
优质生活从拆开始
浙公网安备 33010602011771号