使用Microsoft.Interop.Word获取书签对应文本而非名称的方法问询
获取Word书签对应位置的精准文本
当然可以!你目前的代码只是提取了书签的名称,要拿到书签覆盖的精准文本,核心是利用Bookmark对象的Range属性——它直接指向书签所对应的文本范围。
核心实现代码
修改你现有的代码,通过bookmark.Range.Text就能获取到书签位置的文本:
var orderedBookmarks = WordDocument.Bookmarks.Cast<Bookmark>().OrderBy(d => d.Start).ToList(); foreach (Bookmark bookmark in orderedBookmarks) { // 获取书签对应的纯文本 string bookmarkText = bookmark.Range.Text; // 可选处理:去除文本末尾可能的段落标记、换行符或多余空格 bookmarkText = bookmarkText.TrimEnd('\r', '\n', '\t', ' '); // 将文本添加到DataTable dataTable.Rows.Add(bookmarkText); }
额外注意事项
- 插入点类型书签:如果书签只是一个光标位置(没有选中任何文本),
Range.Text可能返回空字符串或段落标记(\r),可以添加判断过滤这类情况:if (!string.IsNullOrWhiteSpace(bookmarkText)) { dataTable.Rows.Add(bookmarkText); } - 带格式的文本需求:如果需要保留文本的格式(如字体、颜色、样式),可以使用
bookmark.Range.FormattedText,不过它返回的是Range对象,需要进一步处理才能存入表格。 - 位置验证:可以通过
bookmark.Start和bookmark.End属性确认书签在文档中的具体位置范围,方便调试或记录:string positionInfo = $"书签位置:从 {bookmark.Start} 到 {bookmark.End}";
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

