【问题标题】:how to create bookmarks within table如何在表格中创建书签
【发布时间】:2011-08-08 18:23:25
【问题描述】:

我正在自动化 Word 文档处理,我根据搜索条件添加书签。该代码效果很好,但是当我在文档中有表格时它会失败。当我阅读文本时,它似乎在普通文档中以每行一行的形式给出,但在表格的情况下,文本有列和行。因此,当我搜索一个文本并且该文本在单列中以两行写入时,结果会没问题,但是当我选择文本时,WORD API 会从两列而不是同一列中选择文本,而是从两行中选择文本。

col1 col2 这是第二栏 一些文字

现在,如果我搜索文本“这是一些文本”,我得到了正确的结果,但是当我选择它时,我得到了“这是第二列”

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)

【问题讨论】:

  • 对不起,我不明白你的问题:Now if I search the text "This is Some text" I got it correctly 工作得很好,那怎么了? This isSome Text 是否在两个不同的行中?
  • 很抱歉给您带来了困惑。实际上,为了添加书签,我首先使用正则表达式搜索文本,它告诉我字符串存在以及文本的起始位置。然后我选择文本为 _doc.Range(pos, lenofString + pos) 这应该选择实际的文本吧?所以在我的例子中,如果我正在寻找的文本是“这是一些文本”,那么这段代码应该选择它,但会发生什么是它选择了“这是第二列”,这意味着它不知道文本是否被写入在一个单元格内,它只是将其读取为行。这对你有意义吗?

标签: ms-word bookmarks


【解决方案1】:

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

rng = Selection.Cells(1).Range

【讨论】:

  • 感谢您的回答,但在我的情况下,该文档不只包含表格。我要搜索的文本可能写在表格单元格内或任何表格之外(作为平面文本)。我如何知道我找到的文本是否写在表格单元格中。如果没有表格,那么代码可以正常工作,但如果有一个表格也包含关键字,那么它就不能正常工作。
  • 好的,我明白了。所以,你可以试试:If Selection.Information(wdWithInTable) = True Then 但我不能在这里测试它,它应该工作
  • 感谢 JMax 帮助我。我改变了处理这个问题的方式。我现在使用 Word 的 Find 方法来提取信息,然后将其转换为书签。我的方法的问题在于,当我阅读文档时,它不仅包含文本,还包含一些额外的元字符或符号,它们破坏了我的搜索。
  • 很高兴您找到了处理问题的新方法。如果你还有问题,你最好创建一个新问题,让其他用户感到担心并给你一些提示和答案
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2017-04-18
  • 2019-11-07
  • 1970-01-01
  • 2013-08-17
  • 2016-01-11
相关资源
最近更新 更多