You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Word文档书签的范围数值并在DataGridView中正常展示?

解决Word书签范围数值显示为System.__ComObject的问题

你碰到的问题很典型——bookmark.Range是一个COM对象,直接调用ToString()只会返回它的类型标识,根本不是你要的范围数值。要获取书签在文档中的位置范围,得直接访问Range对象的Start和End属性,这两个属性返回的是整数类型的字符位置索引(Word里是从1开始计数的)。

把你的代码改成这样就能正常显示了:

int ii = 0;
var orderedBookmarks = WordDocument.Bookmarks.Cast<Bookmark>().OrderBy(d => d.Start).ToList();
foreach(Bookmark bookmark in orderedBookmarks)
{
    // 直接添加书签名称、起始位置、结束位置到DataGridView
    dataGridView1.Rows.Add(bookmark.Name, bookmark.Range.Start, bookmark.Range.End);
    ii++;
}

几个关键细节:

  • bookmark.Range.Start:书签起始位置的字符索引,代表从文档开头到书签起点的字符数
  • bookmark.Range.End:书签结束位置的字符索引,代表从文档开头到书签终点的字符数
  • 如果你的DataGridView只需要显示一个“范围”字段,可以把起始和结束位置拼接起来,比如用$"{bookmark.Range.Start}-{bookmark.Range.End}"作为单元格值
  • 要是还需要获取书签范围内的文本内容,直接用bookmark.Range.Text就可以拿到

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:38:59