Browse Source

1. 调试导出报告;
2. 向报告中插入项目基本信息;

Ulricy 1 year ago
parent
commit
d52e0b9bfc

+ 1 - 0
QFD/QFD.pro

@@ -19,6 +19,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 }
 
 CONFIG += c++14
+CONFIG += qaxcontainer
 DEFINES += QFD2_APP
 
 INCLUDEPATH += $$PWD/../QFluentWidgets

+ 47 - 45
QFD/common/ExportReportManager.cpp

@@ -3,12 +3,15 @@
 #include "ProjectManager.h"
 
 #include <dbService/ClassSet.h>
+#include <dbService/SchemeInfoService.h>
 
 #include <QWord/QWord.h>
 #include <QWord/QWordDemo.h>
 
 #include <QDir>
 #include <QDate>
+#include <QLabel>
+
 #include <QDebug>
 
 ExportReportManager::ExportReportManager(QObject *parent) : QObject(parent)
@@ -49,19 +52,23 @@ bool ExportReportManager::exportReport()
         return false;
     }
 
-    configWord();
-
-    addCover();
+    insertCommonInfo();
+    if (m_evalType == ProjectManager::OptimalEval) {
+        insertSchemeInfo();
+    }
 
     m_word->setVisible(true);
-    m_word->saveAs();
+    QAxObject *doc = m_word->getWordApp()->querySubObject("ActiveDocument");
+    doc->dynamicCall("SaveAs(const QString&))", QDir::toNativeSeparators(m_word->getFilePath()));
     m_word->close();
-
     return true;
 }
 
 bool ExportReportManager::createWord()
 {
+    delete m_word;
+    m_word = new QWord(this);
+
     // 报告文件夹路径
     QString curPath   = QDir::currentPath();
     QString dateStr   = QDate::currentDate().toString("yyyy-MM-dd");
@@ -71,55 +78,50 @@ bool ExportReportManager::createWord()
         dir.mkpath(reportDir);
     }
 
-    // 报告文件路径
-    QString typeStr  = ProjectManager::nameOfEvalType((ProjectManager::EvalType)m_evalType);
-    QString fileName = m_proj->projectName + "_" + typeStr + "报告.docx";
+    // 根据模板创建 word 文档
+    QString typeStr  = ProjectManager::reportNameOfEvalType((ProjectManager::EvalType)m_evalType);
+    QString tempPath = "E:/qfd/code/QFD2/bin/report_templates/" + typeStr + ".docx";
+    if (!QFile::exists(tempPath)) {
+        qDebug() << __FUNCTION__ << __LINE__ << "Report template not found" << endl;
+        return false;
+    }
+    QString fileName = m_proj->projectName + "_" + typeStr + ".docx";
     QString filePath = reportDir + fileName;
+    if (QFile::exists(filePath)) {
+        QFile::remove(filePath);
+    }
 
-    qDebug() << __FUNCTION__ << __LINE__ << filePath << endl;
+    bool ret = QFile::copy(tempPath, filePath);
+    if (ret) {
+        ret = m_word->open(filePath, false);
+    } else {
+        qDebug() << __FUNCTION__ << __LINE__ << "Copy report template failed" << endl;
+    }
 
-    // 创建 word 文档
-    return m_word->createNewWord(filePath);
+    return ret;
 }
 
-void ExportReportManager::configWord()
+void ExportReportManager::insertCommonInfo()
 {
-    m_word->setPageOrientation(0);
-    m_word->setWordPageView(3);
+    insertText("bmProjName", m_proj->projectName);
+    insertText("bmProjUnit", m_proj->estimateDept);
+    QString dateStr = QDate::currentDate().toString("yyyy年MM月");
+    insertText("bmProjDate", dateStr);
+    insertText("bmEvalPurpose", m_proj->estimateObjective);
 }
 
-void ExportReportManager::addCover()
-{
-    m_word->setParagraphAlignment(0);  //下面文字位置
-    m_word->setFontName(QString::fromLocal8Bit("黑体"));
-    m_word->setFontSize(16);
-    insertWraps(5);
-    m_word->setFontSize(26);
-    m_word->insertText(m_proj->projectName);
-    QString typeStr = ProjectManager::nameOfEvalType((ProjectManager::EvalType)m_evalType);
-    if (typeStr.length() > 2) {
-        typeStr = typeStr.mid(0, typeStr.length() - 2);
-    }
-    m_word->insertText(typeStr);
-    m_word->setFontSize(16);
-    insertWraps();
-    m_word->setFontSize(26);
-    m_word->insertText("评估报告");
-    m_word->setFontSize(16);
-    insertWraps(10);
-    m_word->setFontSize(18);
-    m_word->insertText(m_proj->estimateDept);
-    m_word->setFontSize(16);
-    insertWraps();
-    m_word->setFontSize(18);
-    m_word->insertText(QDate::currentDate().toString("yyyy年MM月"));
-    m_word->setFontSize(16);
-    insertWraps(2);
-}
+void ExportReportManager::insertSchemeInfo() { }
 
-void ExportReportManager::insertWraps(int count)
+bool ExportReportManager::insertText(const QString &bookmark, const QString &text)
 {
-    for (int i = 0; i < count; ++i) {
-        m_word->insertMoveDown();
+    bool ret              = false;
+    QAxObject *doc        = m_word->getWordApp()->querySubObject("ActiveDocument");
+    QAxObject *bmProjName = doc->querySubObject("Bookmarks(QVariant)", bookmark);
+
+    if (bmProjName != nullptr) {
+        bmProjName->dynamicCall("Select(void)");  //选中要选中的区域
+        QAxObject *range = bmProjName->querySubObject("Range");
+        ret              = range->setProperty("Text", text);
     }
+    return ret;
 }

+ 25 - 3
QFD/common/ExportReportManager.h

@@ -22,11 +22,18 @@ public:
 
     bool exportReport();
 
+private:
+    // 初始化 word
     bool createWord();
-    void configWord();
-    void addCover();  // 封面
 
-    void insertWraps(int count = 1);  // 换行
+    // 插入不同评估类型下共同的信息
+    void insertCommonInfo();
+
+    // 填充方案信息
+    void insertSchemeInfo();
+
+    // 在一个书签位置插入文字
+    bool insertText(const QString &bookmark, const QString &text);
 
 signals:
 
@@ -39,6 +46,21 @@ private:
 
 #endif  // EXPORTREPORTMANAGER_H
 
+/**
+ * 标签名称
+ *
+ * 封面
+ * 项目名称:bmProjName,单位:bmProjUnit,时间:bmProjDate
+ *
+ * 评估目的
+ * 评估目的:bmEvalPurpose
+ *
+ * 方案设计
+ * 方案描述:bmSchemes
+ *
+ * 2023-12-13 by chengxr
+ */
+
 /**
 
 【中文字号】    【英文字号】      【毫米】           【像素】

+ 14 - 0
QFD/common/ProjectManager.cpp

@@ -35,6 +35,20 @@ QString ProjectManager::nameOfEvalType(ProjectManager::EvalType t)
     }
 }
 
+QString ProjectManager::reportNameOfEvalType(ProjectManager::EvalType t)
+{
+    switch (t) {
+    case None:
+        return "无";
+    case DemandEval:
+        return "需求分析评估报告";
+    case OptimalEval:
+        return "方案优选评估报告";
+    case EfficiencyEval:
+        return "效能分析评估报告";
+    }
+}
+
 QList<ProjectManager::IndexType> ProjectManager::indexListOfEvalTypes(EvalTypes types)
 {
     QList<IndexType> list;

+ 1 - 0
QFD/common/ProjectManager.h

@@ -38,6 +38,7 @@ public:
     Q_DECLARE_FLAGS(EvalTypes, EvalType)
 
     static QString nameOfEvalType(EvalType t);
+    static QString reportNameOfEvalType(EvalType t);
     static QList<IndexType> indexListOfEvalTypes(EvalTypes flags);
 
     static EvalTypes evalTypes(ProjectInfo proj);

+ 263 - 95
QFD/helper/QWord/QWord.cpp

@@ -2,15 +2,15 @@
 
 #ifdef Q_OS_WIN
 
-#include <QDateTime>
-#include <QFileDialog>
-#include <QFile>
-#include <QTextStream>
-#include <ActiveQt/QAxObject>
-#include <ActiveQt/QAxWidget>
-#include <QTextStream>
-#include <ActiveQt/QAxBase>
-#include <QTextFormat>
+#    include <QDateTime>
+#    include <QFileDialog>
+#    include <QFile>
+#    include <QTextStream>
+#    include <ActiveQt/QAxObject>
+#    include <ActiveQt/QAxWidget>
+#    include <QTextStream>
+#    include <ActiveQt/QAxBase>
+#    include <QTextFormat>
 
 QWord::QWord(QObject *parent)
 {
@@ -96,11 +96,17 @@ bool QWord::openword(bool bVisable)
 {
     m_word     = new QAxObject();
     bool bFlag = m_word->setControl("word.Application");
-    if (!bFlag) { bFlag = m_word->setControl("kwps.Application"); }
-    if (!bFlag) { return false; }
+    if (!bFlag) {
+        bFlag = m_word->setControl("kwps.Application");
+    }
+    if (!bFlag) {
+        return false;
+    }
     m_word->setProperty("Visible", bVisable);
     QAxObject *documents = m_word->querySubObject("Documents");
-    if (!documents) { return false; }
+    if (!documents) {
+        return false;
+    }
     documents->dynamicCall("Add(QString)", m_strFilePath);
     m_bOpened = true;
     return m_bOpened;
@@ -134,8 +140,10 @@ void QWord::close()  //关闭 退出 析构时候也会自动调用一次
     //	m_document->dynamicCall("Close (boolean)",false);
     // if(m_word)
     //	m_word->dynamicCall("Quit (void)");
-    if (m_documents) delete m_documents;
-    if (m_word) delete m_word;
+    if (m_documents)
+        delete m_documents;
+    if (m_word)
+        delete m_word;
     m_document  = NULL;
     m_documents = NULL;
     m_word      = NULL;
@@ -151,7 +159,9 @@ void QWord::saveAs()
 void QWord::setPageOrientation(int flag)  //设置页面1 横向   还是 0竖向
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QString page;
     switch (flag) {
     case 0:
@@ -166,7 +176,9 @@ void QWord::setPageOrientation(int flag)  //设置页面1 横向   还是 0竖
 void QWord::setWordPageView(int flag)
 {
     QAxObject *viewPage = m_word->querySubObject("ActiveWindow");
-    if (nullptr == viewPage) { return; }
+    if (nullptr == viewPage) {
+        return;
+    }
     QString view;
     switch (flag) {
     case 1:
@@ -199,13 +211,17 @@ void QWord::setWordPageView(int flag)
 void QWord::insertMoveDown()  //插入回车
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     selection->dynamicCall("TypeParagraph(void)");
 }
 void QWord::insertText(const QString &text)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     selection->dynamicCall("TypeText(const QString&)", text);
 }
 
@@ -213,7 +229,9 @@ QString QWord::GetText()
 {
     QAxObject *selection = m_word->querySubObject("Selection");
     QString str;
-    if (nullptr != selection) { str = selection->dynamicCall("GetText(void)").toString(); }
+    if (nullptr != selection) {
+        str = selection->dynamicCall("GetText(void)").toString();
+    }
 
     return str;
 }
@@ -221,7 +239,9 @@ QString QWord::GetText()
 void QWord::setParagraphAlignment(int flag)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     if (flag == 0) {
         selection->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter");
     } else if (flag == 1) {
@@ -234,13 +254,21 @@ void QWord::setParagraphAlignment(int flag)
 void QWord::setRowAlignment(int tableIndex, int row, int flag)
 {
     QAxObject *tables = m_document->querySubObject("Tables");
-    if (nullptr == tables) { return; }
+    if (nullptr == tables) {
+        return;
+    }
     QAxObject *table = tables->querySubObject("Item(int)", tableIndex);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     QAxObject *Row = table->querySubObject("Rows(int)", row);
-    if (nullptr == Row) { return; }
+    if (nullptr == Row) {
+        return;
+    }
     QAxObject *range = Row->querySubObject("Range");
-    if (nullptr == range) { return; }
+    if (nullptr == range) {
+        return;
+    }
     Row->querySubObject("Alignment(int)", flag);
     if (flag == 0) {
         range->querySubObject("ParagraphFormat")->setProperty("Alignment", "wdAlignParagraphCenter");
@@ -255,63 +283,95 @@ void QWord::setRowAlignment(int tableIndex, int row, int flag)
 void QWord::setFontSize(int fontsize)  //设置字体大小
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     selection->querySubObject("Font")->setProperty("Size", fontsize);
 }
 void QWord::setFontBold(bool flag)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     selection->querySubObject("Font")->setProperty("Bold", flag);
 }
 void QWord::setFontName(const QString &fontName)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     selection->querySubObject("Font")->setProperty("Name", fontName);
 }
 void QWord::setSelectionRange(int start, int end)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     selection->dynamicCall("SetRange(int, int)", start, end);  //第1个字符后开始,到第9个字符结束范围
 }
 void QWord::getUsedRange(int *topLeftRow, int *topLeftColumn, int *bottomRightRow, int *bottomRightColumn)
 {
     QAxObject *range = m_document->querySubObject("Range");
-    if (nullptr == range) { return; }
+    if (nullptr == range) {
+        return;
+    }
     *topLeftRow = range->property("Row").toInt();
-    if (nullptr == topLeftRow) { return; }
+    if (nullptr == topLeftRow) {
+        return;
+    }
     *topLeftColumn = range->property("Column").toInt();
-    if (nullptr == topLeftColumn) { return; }
+    if (nullptr == topLeftColumn) {
+        return;
+    }
     QAxObject *rows = range->querySubObject("Rows");
-    if (nullptr == rows) { return; }
+    if (nullptr == rows) {
+        return;
+    }
     *bottomRightRow = *topLeftRow + rows->property("Count").toInt() - 1;
-    if (nullptr == bottomRightRow) { return; }
+    if (nullptr == bottomRightRow) {
+        return;
+    }
     QAxObject *columns = range->querySubObject("Columns");
-    if (nullptr == columns) { return; }
+    if (nullptr == columns) {
+        return;
+    }
     *bottomRightColumn = *topLeftColumn + columns->property("Count").toInt() - 1;
-    if (nullptr == bottomRightColumn) { return; }
+    if (nullptr == bottomRightColumn) {
+        return;
+    }
 }
 
 void QWord::intsertTable(int row, int column)
 {
     QAxObject *tables = m_document->querySubObject("Tables");
-    if (nullptr == tables) { return; }
+    if (nullptr == tables) {
+        return;
+    }
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *range = selection->querySubObject("Range");
-    if (nullptr == range) { return; }
+    if (nullptr == range) {
+        return;
+    }
     QVariantList params;
     params.append(range->asVariant());
     params.append(row);
     params.append(column);
     tables->querySubObject("Add(QAxObject*, int, int, QVariant&, QVariant&)", params);
     QAxObject *table = selection->querySubObject("Tables(int)", 1);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     table->setProperty("Style", "网格型");
     QAxObject *Borders = table->querySubObject("Borders");
-    if (nullptr == Borders) { return; }
+    if (nullptr == Borders) {
+        return;
+    }
     Borders->setProperty("InsideLineStyle", 1);
     Borders->setProperty("OutsideLineStyle", 1);
     /*QString doc = Borders->generateDocumentation();
@@ -323,21 +383,31 @@ void QWord::intsertTable(int row, int column)
 void QWord::intsertTable(int tableIndex, int row, int column)
 {
     QAxObject *tables = m_document->querySubObject("Tables");
-    if (nullptr == tables) { return; }
+    if (nullptr == tables) {
+        return;
+    }
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *range = selection->querySubObject("Range");
-    if (nullptr == range) { return; }
+    if (nullptr == range) {
+        return;
+    }
     QVariantList params;
     params.append(range->asVariant());
     params.append(row);
     params.append(column);
     tables->querySubObject("Add(QAxObject*, int, int, QVariant&, QVariant&)", params);
     QAxObject *table = selection->querySubObject("Tables(int)", tableIndex);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     table->setProperty("Style", "网格型");
     QAxObject *Borders = table->querySubObject("Borders");
-    if (nullptr == Borders) { return; }
+    if (nullptr == Borders) {
+        return;
+    }
     Borders->setProperty("InsideLineStyle", 1);
     Borders->setProperty("OutsideLineStyle", 1);
     /*QString doc = Borders->generateDocumentation();
@@ -350,15 +420,21 @@ void QWord::intsertTable(int tableIndex, int row, int column)
 void QWord::setColumnWidth(int column, int width)  //设置列宽
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *table = selection->querySubObject("Tables(1)");
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     table->querySubObject("Columns(int)", column)->setProperty("Width", width);
 }
 void QWord::setCellString(int nTable, int row, int column, const QString &text)
 {
     QAxObject *pTables = m_document->querySubObject("Tables");
-    if (nullptr == pTables) { return; }
+    if (nullptr == pTables) {
+        return;
+    }
     QAxObject *table = pTables->querySubObject("Item(int)", nTable);
     if (table) {
         table->querySubObject("Cell(int,int)", row, column)
@@ -369,14 +445,22 @@ void QWord::setCellString(int nTable, int row, int column, const QString &text)
 void QWord::MergeCells(int tableIndex, int nStartRow, int nStartCol, int nEndRow, int nEndCol)  //合并单元格
 {
     QAxObject *tables = m_document->querySubObject("Tables");
-    if (nullptr == tables) { return; }
+    if (nullptr == tables) {
+        return;
+    }
     QAxObject *table = tables->querySubObject("Item(int)", tableIndex);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     if (table) {
         QAxObject *StartCell = table->querySubObject("Cell(int, int)", nStartRow, nStartCol);
         QAxObject *EndCell   = table->querySubObject("Cell(int, int)", nEndRow, nEndCol);
-        if (nullptr == StartCell) { return; }
-        if (nullptr == EndCell) { return; }
+        if (nullptr == StartCell) {
+            return;
+        }
+        if (nullptr == EndCell) {
+            return;
+        }
         StartCell->querySubObject("Merge(QAxObject *)", EndCell->asVariant());
     }
 }
@@ -393,35 +477,53 @@ void QWord::MergeCells(int tableIndex, int nStartRow, int nStartCol, int nEndRow
 void QWord::setColumnHeight(int nTable, int column, int height)
 {
     QAxObject *pTables = m_document->querySubObject("Tables");
-    if (nullptr == pTables) { return; }
+    if (nullptr == pTables) {
+        return;
+    }
     QAxObject *table = pTables->querySubObject("Item(int)", nTable);
-    if (table) { table->querySubObject("Columns(int)", column)->setProperty("Hight", height); }
+    if (table) {
+        table->querySubObject("Columns(int)", column)->setProperty("Hight", height);
+    }
 }
 void QWord::setRowHeight(int nTable, int Row, int height)
 {
     QAxObject *pTables = m_document->querySubObject("Tables");
-    if (nullptr == pTables) { return; }
+    if (nullptr == pTables) {
+        return;
+    }
     QAxObject *table = pTables->querySubObject("Item(int)", nTable);
 
-    if (table) { table->querySubObject("Rows(int)", Row)->setProperty("Hight", height); }
+    if (table) {
+        table->querySubObject("Rows(int)", Row)->setProperty("Hight", height);
+    }
 }
 
 void QWord::setColumnHeight(int column, int height)  //设置列高
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *table = selection->querySubObject("Tables(1)");
-    if (table) { table->querySubObject("Columns(int)", column)->setProperty("Hight", height); }
+    if (table) {
+        table->querySubObject("Columns(int)", column)->setProperty("Hight", height);
+    }
 }
 
 void QWord::setCellString(int row, int column, const QString &text)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *table = selection->querySubObject("Tables(1)");
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     QAxObject *rows = table->querySubObject("Rows");
-    if (rows) { return; }
+    if (rows) {
+        return;
+    }
     int Count = rows->dynamicCall("Count").toInt();
     table->querySubObject("Cell(int, int)", row, column)
             ->querySubObject("Range")
@@ -431,17 +533,25 @@ void QWord::setCellString(int row, int column, const QString &text)
 void QWord::setCellFontBold(int row, int column, bool isBold)  //设置内容粗体  isBold控制是否粗体
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *table = selection->querySubObject("Tables(1)");
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     table->querySubObject("Cell(int, int)", row, column)->querySubObject("Range")->dynamicCall("SetBold(int)", isBold);
 }
 void QWord::setCellFontSize(int row, int column, int size)  //设置文字大小
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *table = selection->querySubObject("Tables(1)");
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     table->querySubObject("Cell(int, int)", row, column)
             ->querySubObject("Range")
             ->querySubObject("Font")
@@ -458,13 +568,17 @@ int QWord::getTableCount()
 {
     QAxObject *tables = m_document->querySubObject("Tables");
     int val;
-    if (nullptr != tables) { val = tables->property("Count").toInt(); }
+    if (nullptr != tables) {
+        val = tables->property("Count").toInt();
+    }
     return val;
 }
 void QWord::moveForEnd()
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QVariantList params;
     params.append(6);
     params.append(0);
@@ -473,36 +587,54 @@ void QWord::moveForEnd()
 void QWord::insertCellPic(int row, int column, const QString &picPath)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *table = selection->querySubObject("Tables(1)");
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     QAxObject *range = table->querySubObject("Cell(int, int)", row, column)->querySubObject("Range");
-    if (nullptr == range) { return; }
+    if (nullptr == range) {
+        return;
+    }
     range->querySubObject("InlineShapes")->dynamicCall("AddPicture(const QString&)", picPath);
 }
 void QWord::setTableAutoFitBehavior(int flag)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *table = selection->querySubObject("Tables(1)");
-    if (nullptr == table) { return; }
-    if (0 <= flag && flag <= 2) table->dynamicCall("AutoFitBehavior(WdAutoFitBehavior)", flag);
+    if (nullptr == table) {
+        return;
+    }
+    if (0 <= flag && flag <= 2)
+        table->dynamicCall("AutoFitBehavior(WdAutoFitBehavior)", flag);
 }
 void QWord::deleteSelectColumn(int column)
 {
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *table = selection->querySubObject("Tables(1)");
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     QAxObject *columns = table->querySubObject("Columns(int)", column);
-    if (nullptr == columns) { return; }
+    if (nullptr == columns) {
+        return;
+    }
     columns->dynamicCall("Delete()");
 }
 
 void QWord::setOptionCheckSpell(bool flags)
 {
     QAxObject *opetions = m_word->querySubObject("Options");
-    if (!opetions) return;
+    if (!opetions)
+        return;
     opetions->setProperty("CheckGrammarAsYouType", flags);
     opetions->setProperty("CheckGrammarWithSpelling", flags);
     opetions->setProperty("ContextualSpeller", flags);
@@ -512,11 +644,17 @@ void QWord::setOptionCheckSpell(bool flags)
 void QWord::addTableRow(int tableIndex, int nRow, int rowCount)
 {
     QAxObject *tables = m_document->querySubObject("Tables");
-    if (nullptr == tables) { return; }
+    if (nullptr == tables) {
+        return;
+    }
     QAxObject *table = tables->querySubObject("Item(int)", tableIndex);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     QAxObject *rows = table->querySubObject("Rows");
-    if (nullptr == rows) { return; }
+    if (nullptr == rows) {
+        return;
+    }
     int Count = rows->dynamicCall("Count").toInt();
     if (0 < nRow && nRow <= Count) {
         for (int i = 0; i < rowCount; ++i) {
@@ -538,14 +676,22 @@ void QWord::insertTable(int tableIndex, int row, int column)
 {
 
     QAxObject *tables = m_document->querySubObject("Tables");
-    if (nullptr == tables) { return; }
+    if (nullptr == tables) {
+        return;
+    }
     QAxObject *table = tables->querySubObject("Item(int)", tableIndex);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     // QAxObject* rows =table->querySubObject("Rows");
     QAxObject *selection = m_word->querySubObject("Selection");
-    if (nullptr == selection) { return; }
+    if (nullptr == selection) {
+        return;
+    }
     QAxObject *range = selection->querySubObject("Range");
-    if (nullptr == range) { return; }
+    if (nullptr == range) {
+        return;
+    }
     QVariantList params;
     params.append(range->asVariant());
     params.append(row);
@@ -555,7 +701,9 @@ void QWord::insertTable(int tableIndex, int row, int column)
     table->setProperty("Style", "网格型");
 
     QAxObject *Borders = table->querySubObject("Borders");
-    if (nullptr == Borders) { return; }
+    if (nullptr == Borders) {
+        return;
+    }
     Borders->setProperty("InsideLineStyle", 1);
     Borders->setProperty("OutsideLineStyle", 1);
 }
@@ -563,20 +711,30 @@ void QWord::insertTable(int tableIndex, int row, int column)
 void QWord::setColumnWidth(int nTable, int column, int width)
 {
     QAxObject *pTables = m_document->querySubObject("Tables");
-    if (nullptr == pTables) { return; }
+    if (nullptr == pTables) {
+        return;
+    }
     QAxObject *table = pTables->querySubObject("Item(int)", nTable);
-    if (table) { table->querySubObject("Columns(int)", column)->setProperty("width", width); }
+    if (table) {
+        table->querySubObject("Columns(int)", column)->setProperty("width", width);
+    }
 }
 
 //在表格中插入图片
 void QWord::insertCellPic(int nTable, int row, int column, const QString &picPath)
 {
     QAxObject *pTables = m_document->querySubObject("Tables");
-    if (nullptr == pTables) { return; }
+    if (nullptr == pTables) {
+        return;
+    }
     QAxObject *table = pTables->querySubObject("Item(int)", nTable);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     QAxObject *range = table->querySubObject("Cell(int,int )", row, column)->querySubObject("Range");
-    if (nullptr == range) { return; }
+    if (nullptr == range) {
+        return;
+    }
     range->querySubObject("InlineShapes")->dynamicCall("AddPicture(const QString&)", picPath);
 }
 
@@ -584,18 +742,26 @@ void QWord::insertCellPic(int nTable, int row, int column, const QString &picPat
 void QWord::setCellFontBold(int nTable, int row, int column, bool isBold)
 {
     QAxObject *pTables = m_document->querySubObject("Tables");
-    if (nullptr == pTables) { return; }
+    if (nullptr == pTables) {
+        return;
+    }
     QAxObject *table = pTables->querySubObject("Item(int)", nTable);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     table->querySubObject("Cell(int,int )", row, column)->querySubObject("Range")->dynamicCall("SetBold(int)", isBold);
 }
 //设置文字大小
 void QWord::setCellFontSize(int nTable, int row, int column, int size)
 {
     QAxObject *pTables = m_document->querySubObject("Tables");
-    if (nullptr == pTables) { return; }
+    if (nullptr == pTables) {
+        return;
+    }
     QAxObject *table = pTables->querySubObject("Item(int)", nTable);
-    if (nullptr == table) { return; }
+    if (nullptr == table) {
+        return;
+    }
     table->querySubObject("Cell(int,int)", row, column)
             ->querySubObject("Range")
             ->querySubObject("Font")
@@ -604,7 +770,9 @@ void QWord::setCellFontSize(int nTable, int row, int column, int size)
 
 void QWord::setVisible(bool isVisible)
 {
-    if (m_word != nullptr) { m_word->setProperty("Visible", isVisible); }
+    if (m_word != nullptr) {
+        m_word->setProperty("Visible", isVisible);
+    }
 }
 
 #endif

+ 10 - 9
QFD/helper/QWord/QWord.h

@@ -5,15 +5,15 @@
 
 #ifdef Q_OS_WIN
 
-#define _WIN32_DCOM
-
-#include <QMainWindow>
-#include "qmainwindow.h"
-#include <QString>
-#include <QVariant>
-#include <ActiveQt/QAxObject>
-#include <ActiveQt/QAxWidget>
-#include "objbase.h"
+#    define _WIN32_DCOM
+
+#    include <QMainWindow>
+#    include "qmainwindow.h"
+#    include <QString>
+#    include <QVariant>
+#    include <ActiveQt/QAxObject>
+#    include <ActiveQt/QAxWidget>
+#    include "objbase.h"
 //#include "GlobalAppData.h"
 
 class QWord : public QObject
@@ -28,6 +28,7 @@ public:
     QAxObject *getDocuments() { return m_documents; }
     QAxObject *getDocument() { return m_document; }
     QAxObject *getWordApp() { return m_word; }
+    QString getFilePath() { return m_strFilePath; }
 
 public:
     /**************************************************************************/