使用OpenXml SDK和c++ /CLI替换docx文件中的书签
本文关键字:文件 docx 书签 替换 CLI SDK OpenXml c++ 使用 | 更新日期: 2023-09-27 18:05:07
我试图用c++'cli中使用开放xml SDK概念的文本替换docx中的书签。下面的代码将从word文档中获取书签,并检查书签是否与字符串"VERSION"匹配,如果为真,则将其替换为docx文件中的字符串"0000"。
Paragraph ^paragraph = gcnew Paragraph();
Run ^run = gcnew Run();
DocumentFormat::OpenXml::Wordprocessing::Text^ text = gcnew DocumentFormat::OpenXml::Wordprocessing::Text(“0000”);
run->AppendChild(text);
paragraph->AppendChild(run);
IDictionary<String^, BookmarkStart^> ^bookmarkMap =
gcnew Dictionary<String^, BookmarkStart^>();
for each (BookmarkStart ^bookmarkStart in
GlobalObjects::wordDoc->MainDocumentPart->RootElement->Descendants<BookmarkStart^>())
{
if (bookmarkStart->Name->Value == “VERSION”)
{
bookmarkStart->Parent->InsertAt<Paragraph^>(paragraph,3);
}
}
上面的代码在大多数情况下工作良好(无论我们插入书签),但有时它会失败,我无法找到原因。如果书签插入在一行的起始位置,那么在执行后我无法打开docx文件,会有一些错误。我试着给索引值为0的InserAt方法,即使这是不工作。
请为以上问题提供解决方案。
Thanks in advance
参见如何从OpenXML WordprocessingML文档中检索书签的文本以获取检索文本的代码。它是用c#编写的,但您可以直接使用c++/CLI中的代码。
请参阅在OpenXML WordprocessingML文档中替换书签的文本,了解可用于替换文本的算法。