如何获取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
相关产品推荐
相关产品推荐

