使用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 SDK和c++ /CLI替换docx文件中的书签

参见如何从OpenXML WordprocessingML文档中检索书签的文本以获取检索文本的代码。它是用c#编写的,但您可以直接使用c++/CLI中的代码。

请参阅在OpenXML WordprocessingML文档中替换书签的文本,了解可用于替换文本的算法。