2011-08-08 48 views
0

我將基於搜索條件添加書籤的Word文檔處理自動化。代碼很好用,但在文檔中有表格時失敗。看起來像在正常的文檔中,當我讀取文本時,它以行爲單位給出,但在表格中,文本具有列和行。所以,當我搜索一個文本,並且文本是在一行中寫成兩行的時候,結果是可以的,但是當我選擇文本時,WORD API會從兩列中選擇文本,而不是同一列中的文本,而是兩行。現在如何在表格內創建書籤

 
col1   col2 
This is  Second Column 
Some Text 

如果我搜索文本「這是一些文本」我得到了它正確,但是當我選擇它,我得到了「這是第二列」

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) 
+0

對不起,我不明白你的問題:'現在,如果我搜索的文本「這是一些文本」我得到了它正確'w好的,所以怎麼了?這是'和'一些文字'在兩個不同的行嗎? – JMax

+0

對不起,我感到困惑。實際上,爲了添加書籤,我首先使用正則表達式搜索文本,它告訴我該字符串存在以及文本的起始位置。然後,我選擇文本爲_doc.Range(pos,lenofString + pos)這應該選擇實際的文本嗎?所以在我的例子中,如果我正在尋找的文本是「這是一些文本」,那麼這段代碼應該選擇它,但是會發生的是它選擇「這是第二列」,這意味着它不知道文本是否被寫入在一個單元格內,它只是將其作爲行讀取。這對你有意義嗎? – Kashif

回答

0

,而不是選擇文本按長度,你可以選擇全細胞,試圖通過這種方式調整代碼:

rng = Selection.Cells(1).Range 
+0

感謝您的答案,但在我的情況下,文件不包含表格。我想要搜索的文本可能寫在表格單元格內,也可能寫在任何表格之外(作爲平面文本)。我怎麼知道我發現的文本是寫在表格單元格內的。如果沒有表,那麼代碼工作的很好,但如果有一個表也包含關鍵字,那麼它不能正常工作。 – Kashif

+0

好吧,我明白了。所以,你可以試試:'如果Selection.Information(wdWithInTable)= True然後',但我不能在這裏測試它,它*應該*工作 – JMax

+0

謝謝JMax幫助我。我改變了我解決這個問題的方式。我現在使用Word的Find方法來提取信息,然後將其轉換爲書籤。我的方法存在的問題是,當我閱讀文檔時,它不僅包含文本,而且包含一些額外的元字符或符號,這些文字或符號正在破壞我的搜索。 – Kashif