使用OpenXml SDK和C ++ / CLI替换docx文件中的书签

时间:2011-08-11 13:10:23

标签: c# c++-cli openxml openxml-sdk docx

我正在尝试使用open xml SDK概念将docx中的书签替换为c ++ \ cli中的文本。 下面的代码将从word文档中获取书签,并检查书签是否与字符串“VERSION”匹配(如果为true),它将替换为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文件,会出现一些错误。 我尝试将InserAt方法的索引值设为0,即使这不起作用。

请提供上述解决方案。

提前致谢

1 个答案:

答案 0 :(得分:2)

有关检索文本的代码,请参阅How to Retrieve the Text of a Bookmark from an OpenXML WordprocessingML Document。它是用C#编写的,但您可以直接使用C ++ / CLI中的代码。

请参阅Replacing Text of a Bookmark in an OpenXML WordprocessingML Document了解可用于替换文字的算法。