替换 Word 文档 QAxObject QT / C++ 中的字段值
Posted
技术标签:
【中文标题】替换 Word 文档 QAxObject QT / C++ 中的字段值【英文标题】:Replacing Field values in Word Document QAxObject QT / C++ 【发布时间】:2020-11-17 12:10:01 【问题描述】:我真的是 QT 新手,我的任务是以编程方式更新 word 文档中的一些字段值,目前我可以很好地替换 word 文档中的文本,但是当该字段值在对象(表或任何东西)内时,它不是工作,我的代码是:
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 字段。这样你会得到更多的关注。如果您可以更改目标文件的性质,您最好用真实的 Word DocVariable 或 DocProperty 字段替换您的目标。然后使用您的代码更改变量或属性并更新文档中的相关字段。某些文档属性(在 Quick Parts > Document Properties 菜单下)映射到 XML 数据点,如果使用这些属性,则不需要更新字段。 其实我们是在创建字段:Insert -> Quick Parts -> Field,然后选择字段的类型,可能这个不对但是不知道怎么让其他模板导致word文档必须包含一些占位符,我可以在其中以编程方式添加一些值 占位符可以是 (1) DocVariable 字段或 (2) DocProperty 字段。您可以使用代码更改变量或属性,然后更新该字段。您还可以使用 mapped DocProperty 内容控件之一,在这种情况下,如果属性发生更改,则无需更新字段。它是自动的。更多关于这些在我的相关页面:addbalance.com/word/MappedControls.htm 嘿老兄,谢谢,你能把它写成一个解决方案,这样我就可以把它标记为答案:D 【参考方案1】:如果您可以更改目标文件的性质,您最好用真实的 Word DocVariable 或 DocProperty 字段替换您的目标。然后使用您的代码更改变量或属性并更新文档中的相关字段。一些文档属性(在 Quick Parts > Document Properties 菜单下)映射到 XML 数据点,如果使用这些属性,则不需要更新字段。
占位符可以是 (1) DocVariable 字段或 (2) DocProperty 字段。您可以使用代码更改变量或属性,然后更新字段。
您还可以使用内置的 mapped 文档属性内容控件之一,在这种情况下,如果属性发生更改,则无需更新字段。它是自动的。更多关于这些在我的相关页面:Repeating Data Mapped Document Property Content Controls or Other Mapped Content Controls。
这里是关于使用 vba 访问文档属性的两个 Word MVP 页面的链接。
How Can I Get Access to the Document Properties of a Document Without Opening the Document How to Use a Single vba Procedure to Read or Write Both Built-In and Custom Document Properties【讨论】:
以上是关于替换 Word 文档 QAxObject QT / C++ 中的字段值的主要内容,如果未能解决你的问题,请参考以下文章
Qt 向word中插入文字(使用QAxWidget和QAxObject)
Qt QAxObject - 在 querySubObject 和 Cell 属性上查找 Excell API/SDK 文档
Qt ActiveX QAxObject 格式 Excel 单元格注释