替换 Word 文档中的字段值 QAxObject QT / C++
Replacing Field values in Word Document QAxObject QT / C++
我真的是 QT 的新手,我的任务是以编程方式更新 word 文档中的一些字段值,目前我可以很好地替换 word 文档中的文本,但是当该字段值在对象内部时(table 或任何东西)它不起作用,我的代码是:
QString outFile("D:\#test files\output.docx");
QString inFile1("D:\#test files\input.docx");
QAxObject axObject("Word.Application");
QAxObject* documents = axObject.querySubObject("Documents");
QAxObject* document = documents->querySubObject("Open(const QString&, bool)", inFile1, true);
QAxObject* selection = axObject.querySubObject("Selection");
auto find = selection->querySubObject("Find");
QString sOld = "${name}";
QString sNew = "Ibrahim";
bool bMatchCase = false;
bool bMatchWholeWord = false;
bool bMatchWildCards = false;
bool bReplaceAll = true;
QVariantList vl = { sOld, bMatchCase, bMatchWholeWord, bMatchWildCards, false, false, true, 1, false, sNew, bReplaceAll ? "2" : "1" };
find->dynamicCall("Execute(QString,bool,bool,bool,bool,bool,bool,int,bool,QString,int)", vl);
document->dynamicCall("SaveAs(const QString&)", outFile);
document->dynamicCall("Close()");
axObject.dynamicCall("Quit()");
如果你能帮忙就太棒了:)
如果您可以更改目标文件的性质,您最好将目标替换为真正的 Word DocVariable 或 Doc属性 字段。然后使用您的代码更改变量或属性并更新文档中的相关字段。某些文档属性(在“文档部件”>“文档属性”菜单下)映射到 XML 数据点,如果使用这些数据点,则不需要更新字段。
占位符可以是 (1) DocVariable 字段或 (2) Doc属性 字段。您可以使用代码更改变量或属性,然后更新字段。
您还可以使用内置的 mapped 文档 属性 内容控件之一,在这种情况下,如果 属性 改变了。它是自动的。有关这些的更多信息,请参见我的相关页面:Repeating Data Mapped Document Property Content Controls or Other Mapped Content Controls.
这里是关于使用 vba 访问文档属性的两个 Word MVP 页面的链接。
我真的是 QT 的新手,我的任务是以编程方式更新 word 文档中的一些字段值,目前我可以很好地替换 word 文档中的文本,但是当该字段值在对象内部时(table 或任何东西)它不起作用,我的代码是:
QString outFile("D:\#test files\output.docx");
QString inFile1("D:\#test files\input.docx");
QAxObject axObject("Word.Application");
QAxObject* documents = axObject.querySubObject("Documents");
QAxObject* document = documents->querySubObject("Open(const QString&, bool)", inFile1, true);
QAxObject* selection = axObject.querySubObject("Selection");
auto find = selection->querySubObject("Find");
QString sOld = "${name}";
QString sNew = "Ibrahim";
bool bMatchCase = false;
bool bMatchWholeWord = false;
bool bMatchWildCards = false;
bool bReplaceAll = true;
QVariantList vl = { sOld, bMatchCase, bMatchWholeWord, bMatchWildCards, false, false, true, 1, false, sNew, bReplaceAll ? "2" : "1" };
find->dynamicCall("Execute(QString,bool,bool,bool,bool,bool,bool,int,bool,QString,int)", vl);
document->dynamicCall("SaveAs(const QString&)", outFile);
document->dynamicCall("Close()");
axObject.dynamicCall("Quit()");
如果你能帮忙就太棒了:)
如果您可以更改目标文件的性质,您最好将目标替换为真正的 Word DocVariable 或 Doc属性 字段。然后使用您的代码更改变量或属性并更新文档中的相关字段。某些文档属性(在“文档部件”>“文档属性”菜单下)映射到 XML 数据点,如果使用这些数据点,则不需要更新字段。
占位符可以是 (1) DocVariable 字段或 (2) Doc属性 字段。您可以使用代码更改变量或属性,然后更新字段。
您还可以使用内置的 mapped 文档 属性 内容控件之一,在这种情况下,如果 属性 改变了。它是自动的。有关这些的更多信息,请参见我的相关页面:Repeating Data Mapped Document Property Content Controls or Other Mapped Content Controls.
这里是关于使用 vba 访问文档属性的两个 Word MVP 页面的链接。