我已经阅读了我能找到的与此相关的所有内容(包括Read Word bookmarks),但无法获得任何工作。
我正在尝试浏览包含书签的Word文档,并获取每个书签的值。我可以遍历文档并获取书签的名称,但无法弄清楚如何获取书签的值/文本。
以下是我用来获取书签名称的内容:
using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(athleteFile, false))
{
foreach (BookmarkStart bookmark in wordDocument.MainDocumentPart.Document.Body.Descendants<BookmarkStart>())
{
System.Diagnostics.Debug.WriteLine(bookmark.Name + " - " + bookmark.InnerText);
}
}
答案 0 :(得分:0)
首先,我强烈建议您使用Open XML SDK 2.5 Productivity tool,这样您就可以更好地了解自己正在使用的内容。
其次,Word中的书签没有任何与之关联的值。它通常标记word文档中的位置。所以你要做的就是不行。
<w:bookmarkStart w:name="bkStart" w:id="0" />
这是在向文档添加书签时在docx文件中创建的XML元素。
答案 1 :(得分:0)
通过访问其父母的内部文本来获取书签文本:
using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(athleteFile, false))
{
foreach (BookmarkStart bookmark in wordDocument.MainDocumentPart.Document.Body.Descendants<BookmarkStart>())
{
// Get name of bookmark
string bookmarkNameOriginal = bookmark.Name;
// Get bookmark text from parent elements text
string bookmarkText = bookmark.Parent.InnerText;
}
}
我找到了Xceed使用DocX的另一种解决方案。
注意: Reading bookmarks is slow是免费版本(Docx v1.3)。但是,它已在Docx v1.4中得到修复(免费版本更新较慢)。
using Xceed.Words.NET;
/// <summary>
/// Read bookmark text/names in word document
/// </summary>
/// <param name="filePath"></param>
/// <remarks>
/// Uses free DocX by Xceed
/// </remarks>
public void ReadBookmarks(string filePath)
{
//Load document
using (DocX Document = DocX.Load(filePath))
{
//This is slow in free version (v1.3 Docx), is fixed in v1.4Docx (free version is slower to get this)
BookmarkCollection bookmarks = Document.Bookmarks;
//Iterate over bookmarks in document
foreach (Bookmark bookmark in bookmarks) {
//Name of bookmark
string bookmarkName = bookmark.Name;
//Text of bookmark, usually a word heading (1, 2, 3...)
string bookmarkText = bookmark.Paragraph.Text;
}
}
}