Ms word 如何在表中创建书签

Ms word 如何在表中创建书签,ms-word,bookmarks,Ms Word,Bookmarks,我正在自动化word文档处理,根据搜索条件添加书签。代码工作得很好,但当我在文档中有表时,它就失败了。在正常文档中,当我阅读文本时,它似乎是以每行一行的形式给出的,但是在表格中,文本有列和行。所以,当我搜索一个文本,并且该文本被写在一列中的两行中时,结果是可以的,但是当我选择文本单词API时,它会从两列中选择文本,而不是从同一列中选择两行 您可以选择整个单元格,而不是按长度选择文本,尝试以以下方式调整代码: reg = New Regex(result.token(j).ToString())

我正在自动化word文档处理,根据搜索条件添加书签。代码工作得很好,但当我在文档中有表时,它就失败了。在正常文档中,当我阅读文本时,它似乎是以每行一行的形式给出的,但是在表格中,文本有列和行。所以,当我搜索一个文本,并且该文本被写在一列中的两行中时,结果是可以的,但是当我选择文本单词API时,它会从两列中选择文本,而不是从同一列中选择两行


您可以选择整个单元格,而不是按长度选择文本,尝试以以下方式调整代码:

reg = New Regex(result.token(j).ToString())
                Dim m As Match = reg.Match(_doc.Range.Text, 0)
                pos = m.Index ' start position is fine

                ''  start is the starting position of the token in the content...
                ''length is the size of the token
                len = result.token(j).ToString().Length ' text length is fine

                rng = _doc.Range(pos, len + pos) ' this copies the text from the second col
                _doc.Bookmarks.Add(bookmarkName, rng)

对不起,我不明白你的问题:现在如果我搜索文本,这是我得到的一些文本,它正常工作,那么有什么问题吗?这是两行中的文本吗?很抱歉造成混淆。实际上,为了添加书签,我首先使用正则表达式搜索文本,它告诉我字符串存在以及文本的起始位置。然后我选择文本为_doc.Rangepos,lenofString+pos这应该选择实际文本对吗?所以在我的示例中,如果我要查找的文本是这是某个文本,那么代码应该选择它,但发生的是它选择了这是第二列,这意味着它不知道文本是否写在单元格中,它只是将其作为行读取。这对你有什么意义吗?谢谢你的回答,但在我的情况下,文档不仅仅包含表格。我要搜索的文本可以写在表格单元格内,也可以作为平面文本写在任何表格外。我如何知道我找到的文本是否写在表格单元格中。如果没有表,那么代码工作得很好,但是如果有一个表也包含关键字,那么它就不能正常工作。好的,我明白了。所以,您可以尝试:如果Selection.InformationwdWithInTable=True,那么我不能在这里测试它,它应该可以工作。感谢JMax帮助我。我改变了处理这个问题的方式。我现在使用Word的Find方法提取信息,然后将其转换为书签。我的方法的问题是,当我阅读文档时,它不仅包含文本,而且还包含一些额外的元字符或符号,这破坏了我的搜索。我很高兴你找到了一种处理问题的新方法。如果你仍然有问题,你最好创建一个新的问题,这样其他用户会感到担心,并给你一些提示和答案
reg = New Regex(result.token(j).ToString())
                Dim m As Match = reg.Match(_doc.Range.Text, 0)
                pos = m.Index ' start position is fine

                ''  start is the starting position of the token in the content...
                ''length is the size of the token
                len = result.token(j).ToString().Length ' text length is fine

                rng = _doc.Range(pos, len + pos) ' this copies the text from the second col
                _doc.Bookmarks.Add(bookmarkName, rng)
rng = Selection.Cells(1).Range