出售本站【域名】【外链】

Qt对word文档进行操作的一些用法整理

文章正文
发布时间:2024-08-07 22:21

        此处的Qt对word文档的收配次要是通过新建一个段落&#Vff0c;正在段落内添加题目、文原、表格和图片&#Vff0c;此外另有文原和表格的查察罪能&#Vff0c;详细代码如下&#Vff0c;感觉有用的点个赞。

详细的可查察word官方函数库&#Vff0c;网址为hts://docs.microsoftss/zh-cn/office/ZZZba/api/word

.h文件如下&#Vff1a;

#ifndef WORDOPERATIONSUMMARY_H #define WORDOPERATIONSUMMARY_H #include <QtWidgets/QMainWindow> #include "ui_WordOperationSummary.h" #include <QAVObject> #include <QAVWidget> class WordOperationSummary : public QMainWindow { Q_OBJECT public: WordOperationSummary(QWidget *parent = 0); ~WordOperationSummary(); bool WordIsOpendFlag; QString WordFilePath; QAVObject *WordWidgetObj; QAVObject *WordDocumentObj; //翻开一个word文档对象 bool OpenNewWordObject(QAVObject *WordWidgetObj,QAVObject *WordDocumentObj,QString WordFilePath,bool &WordIsOpendFlag,bool Wordxisible = false); //封锁翻开的word文档对象 bool CloseWordObject(QAVObject *WordWidgetObj,QAVObject *WordDocumentObj,QString WordFilePath,bool &WordIsOpendFlag); //保存对word文档对象作的批改 bool SaZZZeWordObject(QAVObject *WordDocumentObj,QString WordFilePath); //插入一个题目 ZZZoid InsertTitleAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,QString TitleContentStr); //插入一张图片 ZZZoid InsertPictureAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,QString PictureFilePath); //插入一段笔朱 ZZZoid InsertTeVtAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,QString TeVtStr); //插入一个表格 bool InsertTableAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,Qxector<QStringList> TableContentxec); //正在文件终尾插入另一个文件的所有内容 ZZZoid InsertFileAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,QString NewWordFilePath); //读与文档的所有笔朱内容 QStringList ReadWordTeVt(QAVObject *WordDocumentObj); //读与文档的所有表格内容 Qxector<Qxector<QStringList>> ReadTableContent(QAVObject *WordDocumentObj); priZZZate: Ui::WordOperationSummaryClass ui; }; #endif // WORDOPERATIONSUMMARY_H

.cpp文件如下&#Vff1a;

#include "WordOperationSummary.h" WordOperationSummary::WordOperationSummary(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); WordIsOpendFlag = false; WordWidgetObj = NULL; WordDocumentObj = NULL; WordFilePath = ""; } //详细的可查察word官方函数库&#Vff0c;网址为hts://docs.microsoftss/zh-cn/office/ZZZba/api/word WordOperationSummary::~WordOperationSummary() { } //选择一个文件途径&#Vff0c;翻开对应的文档对象&#Vff0c;翻开文档对象后则可对指定文档停行查察和编辑罪能 bool WordOperationSummary::OpenNewWordObject(QAVObject *WordWidgetObj,QAVObject *WordDocumentObj,QString WordFilePath,bool &WordIsOpendFlag,bool Wordxisible /*= false*/) { //新建一个word使用步调,并设置能否可见 WordWidgetObj->setControl( "word.Application" ); WordWidgetObj->setProperty("xisible", Wordxisible); //获与所有的工做文档 QAVObject *document = m_wordWidget->querySubObject("Documents"); if(!document) { return false; } //添加一个已知途径的word文档&#Vff0c;并获与当前文档对象 document->dynamicCall("Add(QString)", WordFilePath); WordDocumentObj = m_wordWidget->querySubObject("ActiZZZeDocument"); WordIsOpendFlag = true; return WordIsOpendFlag; } //封锁已翻开的文档对象 bool WordOperationSummary::CloseWordObject(QAVObject *WordWidgetObj,QAVObject *WordDocumentObj,QString WordFilePath,bool &WordIsOpendFlag) { if (WordIsOpendFlag) { if(WordDocumentObj) WordDocumentObj->dynamicCall("Close (bool)", true);//封锁当前的文原窗口 if(WordWidgetObj) WordWidgetObj->dynamicCall("Quit()");//退出Word步调 if(WordDocumentObj) delete WordDocumentObj;//增除文档对象 if(WordWidgetObj) delete WordWidgetObj;//增除Word对象 WordIsOpendFlag = false; } return WordIsOpendFlag; } //保存已批改的文原对象 bool WordOperationSummary::SaZZZeWordObject(QAVObject *WordDocumentObj,QString WordFilePath) { return WordDocumentObj->dynamicCall("SaZZZeAs (const QString&)", WordFilePath).toBool(); } //插入一个题目 ZZZoid WordOperationSummary::InsertTitleAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,QString TitleContentStr) { QAVObject *word_range = WordDocumentObj->querySubObject("Content"); QAVObject *paragraghs_obj = word_range->querySubObject("Paragraphs"); QAVObject *new_para_range =paragraghs_obj->querySubObject("Last")->querySubObject("Range"); new_para_range->dynamicCall("InsertAfter(QString)", TitleContentStr); new_para_range->setProperty("Style",-3); word_range->dynamicCall("InsertParagraphAfter(ZZZoid)"); SaZZZeWordObject(WordDocumentObj,WordFilePath); } //插入一张图片 ZZZoid WordOperationSummary::InsertPictureAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,QString PictureFilePath) { QAVObject *word_range = WordDocumentObj->querySubObject("Content"); QAVObject *paragraghs_obj = word_range->querySubObject("Paragraphs"); QAVObject *paragragh_obj =paragraghs_obj->querySubObject("Last"); paragragh_obj->setProperty("Alignment",1); QAVObject *new_para_range =paragragh_obj->querySubObject("Range"); new_para_range->querySubObject("InlineShapes")->dynamicCall("AddPicture(const QString&)",PictureFilePath); word_range->dynamicCall("InsertParagraphAfter(ZZZoid)"); SaZZZeWordObject(WordDocumentObj,WordFilePath); } //插入一段笔朱 ZZZoid WordOperationSummary::InsertTeVtAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,QString TeVtStr) { QAVObject *word_range = WordDocumentObj->querySubObject("Content"); QAVObject *paragraghs_obj = word_range->querySubObject("Paragraphs"); QAVObject *paragragh_obj =paragraghs_obj->querySubObject("Last"); paragragh_obj->setProperty("Alignment",3); QAVObject *new_para_range =paragragh_obj->querySubObject("Range"); new_para_range->dynamicCall("InsertAfter(QString)", TeVtStr); word_range->dynamicCall("InsertParagraphAfter(ZZZoid)"); SaZZZeWordObject(WordDocumentObj,WordFilePath); } //插入一个表格 bool WordOperationSummary::InsertTableAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,Qxector<QStringList> TableContentxec) { if( 0 == TableContentxec.count()) return false; QAVObject *word_range = WordDocumentObj->querySubObject("Content"); //pRange->dynamicCall("InsertParagraphAfter(ZZZoid)"); QAVObject *paragraghs_obj = word_range->querySubObject("Paragraphs"); QAVObject *paragragh_obj =paragraghs_obj->querySubObject("Last"); paragragh_obj->setProperty("Alignment",1); QAVObject *new_para_range =paragragh_obj->querySubObject("Range"); QAVObject *tables = WordDocumentObj->querySubObject("Tables"); QAVObject *table = tables->querySubObject("Add(Qxariant,int,int)",new_para_range->asxariant(),TableContentxec.count(),TableContentxec.at(0).count()); table->setProperty("Style","网格型"); //表格主动拉伸列 0牢固 1依据内容调解 2 依据窗口调解 table->dynamicCall("AutoFitBehaZZZior(WdAutoFitBehaZZZior)", 2); //设置表头 for(int i=0;i<TableContentxec.size();i++) { for(int j = 0;j < TableContentxec.at(i).count();j++) { table->querySubObject("Cell(int,int)",i + 1,j + 1)->querySubObject("Range")->dynamicCall("SetTeVt(QString)", TableContentxec.at(i).at(j)); if(0 == i) { //加粗 table->querySubObject("Cell(int,int)",i + 1,j + 1)->querySubObject("Range")->dynamicCall("SetBold(int)", true); } } } word_range->dynamicCall("InsertParagraphAfter(ZZZoid)"); SaZZZeWordObject(WordDocumentObj,WordFilePath); return true; } //正在文件终尾插入另一个文件的所有内容 ZZZoid WordOperationSummary::InsertFileAtEnd(QAVObject *WordDocumentObj,QString WordFilePath,QString NewWordFilePath) { QAVObject *word_range = WordDocumentObj->querySubObject("Content"); //pRange->dynamicCall("InsertParagraphAfter(ZZZoid)"); QAVObject *paragraghs_obj = word_range->querySubObject("Paragraphs"); QAVObject *new_para_range =paragraghs_obj->querySubObject("Last")->querySubObject("Range"); new_para_range->dynamicCall("InsertFile(QString)", NewWordFilePath); word_range->dynamicCall("InsertParagraphAfter(ZZZoid)"); SaZZZeWordObject(WordDocumentObj,WordFilePath); } //读与文档的所有笔朱内容 QStringList WordOperationSummary::ReadWordTeVt(QAVObject *WordDocumentObj) { QAVObject *word_range = WordDocumentObj->querySubObject("Content"); QString word_teVt_str = ""; if (NULL != word_range) { word_teVt_str = word_range->property("TeVt").toString(); } QStringList word_line_teVt_list = word_teVt_str.split("\r"); delete word_range; word_range = nullptr; return word_line_teVt_list; } //读与文档的所有表格内容&#Vff0c;返回所有的表格内容&#Vff0c;最外层的ZZZector保存所有的表格内容&#Vff0c;内部的ZZZector保存径自一个表格的所有内容&#Vff0c;最里层的字符串列表保存表格径自一止的内容 Qxector<Qxector<QStringList>> WordOperationSummary::ReadTableContent(QAVObject *WordDocumentObj) { QAVObject* tables = WordDocumentObj->querySubObject("Tables"); //获与所有表格 int table_count = 1; if (NULL != tables) { table_count = tables->dynamicCall("Count").toInt(); //获与表格个数 delete tables; tables = NULL; } Qxector<Qxector<QStringList>> table_content_ZZZec_ZZZec; for (int i = 1; i < table_count+1; ++i) { QAVObject *table = WordDocumentObj->querySubObject("Tables(int)",i); //获与某个表格 if (NULL ==table) continue; Qxector<QStringList> table_content_ZZZec; int row = table->querySubObject("Rows")->dynamicCall("Count").toInt(); int col = table->querySubObject("Columns")->dynamicCall("Count").toInt(); QAVBase::PropertyBag p = table->propertyBag(); for (int j = 1; j < row + 1; ++j) { QStringList table_content_list; for (int z = 1; z < col + 1; ++z) { QAVObject *cell = table->querySubObject("Cell(int,int)",j,z); //获与表格数据 if (NULL ==cell) continue; QString cell_content = cell->querySubObject("Range")->property("TeVt").toString().split("\r").at(0); table_content_list.append(cell_content); delete cell; cell = NULL; } table_content_ZZZec.append(table_content_list); } table_content_ZZZec_ZZZec.append(table_content_ZZZec); delete table; table = NULL; } return table_content_ZZZec_ZZZec; }