我正在尝试使用openxml和c#编辑单词doc。我有doc的以下xml结构:
<w:bookmarkStart w:name="HelloWorld" w:id="0" />
<w:bookmarkStart w:name="_GoBack" w:id="1" />
<w:r w:rsidRPr="00874DDF">
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
<w:b />
<w:bCs />
<w:sz w:val="28" />
<w:szCs w:val="28" />
<w:u w:val="single" />
</w:rPr>
<w:t>Hello World:</w:t>
</w:r>
</w:p>
<w:p w:rsidRPr="00583A84" w:rsidR="00CB71E3" w:rsidP="00CB71E3" w:rsidRDefault="00CB71E3">
<w:pPr>
<w:spacing w:line="260" w:lineRule="atLeast" />
<w:jc w:val="both" />
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
<w:color w:val="000000" />
</w:rPr>
</w:pPr>
<w:r w:rsidRPr="00583A84">
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" />
<w:color w:val="000000" />
</w:rPr>
<w:t>HelloWorld.</w:t>
</w:r>
</w:p>
<w:bookmarkEnd w:id="0" />
<w:bookmarkEnd w:id="1" />
我正在尝试删除单词doc页面中书签中的所有文本。然而,xml结构使我无法这样做。这是因为书签文本在两个不同的段落父标签之间分开。如何删除书签开始0和书签结束0之间的所有文本?
答案 0 :(得分:2)
我正在构建一个小项目,在我的工作中编辑Word中的文本,表格和图形。 使用openXML,我将如何替换书签所覆盖的文本。
我不知道你是否对所涵盖的bookmarkStart
元素进行了隔离,所以我也将其包括在内。
首先捕获bookmarkStart
:
Dictionary<String,BookmarkStart> bookMap = new Dictionary<String, BookmarkStart>(); //a dictionary so we can lookup a bookmarkStart with it's name
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open("MyWordDocument.docx", true))
{
var mainPart = wordDoc.MainDocumentPart; //get mainpart
var bookmarks = mainPart.Document.Body.Descendants<BookmarkStart>(); //get all bookmarks
foreach (BookmarkStart bookmarkStart in bookmarks) //save them to dictionary
{
bookMap[bookmarkStart.Name] = bookmarkStart;
}
ReplaceInBookmark(bookmark["myBookmark"],"text to insert");
}
然后替换部分:
public void ReplaceInBookmark(BookmarkStart bookmarkStart, string text)
{
OpenXmlElement elem = bookmarkStart.NextSibling();
while (elem != null && !(elem is BookmarkEnd))
{
OpenXmlElement nextElem = elem.NextSibling();
elem.Remove();
elem = nextElem;
}
bookmarkStart.Parent.InsertAfter<Run>(new Run(new Text(text)), bookmarkStart);
}
我认为这应该可以胜任。 但它是一些复制品,对某些代码进行了一些小编辑,我现在无法自由测试,因此可能存在错误/错误。
如果要删除书签及其内容(不替换它),您可以尝试发送空字符串或对方法进行少量更改。 这个基本上删除了所有元素,然后插入一个带有指定文本的新Run。
祝你好运!