如何在 Word 中取得目前游標的位置(列號,行號) |
答題得分者是:sryang
|
mike1000
一般會員 發表:2 回覆:5 積分:1 註冊:2011-06-14 發送簡訊給我 |
|
mike1000
一般會員 發表:2 回覆:5 積分:1 註冊:2011-06-14 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
mike1000
一般會員 發表:2 回覆:5 積分:1 註冊:2011-06-14 發送簡訊給我 |
感謝 sryang 大大的意見:
小弟主要是想得到游標所在位置的行號即可,因為主要是想藉由 Find 兩次特定字串的間距得到相差的總列數, 然後一次用 OlePropertyGet(Selection) 的動作取得其間的資料,複製到剪貼簿,最後再貼到 BCB 的 OleContainer 物件中, 比起一列一列 parsing 取得內文資料作比對後,再計算所要的總列數來的快多了(尤其 Word 資料量大的時候),希望大大能理解小弟使用此法的用意,並提供解決的 Solution, 因為找了許多網路的資料, 還是無法找到取得列數的方法, 冀望能得到各位先進們的協助與幫忙,再次感謝!! |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
Find 動作如果找到了要尋找的文字,ActiveWindow.Selection 的 Start 跟 End 屬性會記載著找到文字的開頭位置跟結尾位置
所以,Find 兩次您要尋找的特定字串,分別紀錄 Start 與 End (比如叫做 start1, end1, start2, end2) 然後設定 ActiveWindow.Selection.Start = end1 1; ActiveWindow.Selection.End = start2 - 1; 就可以從 ActiveWindow.Selection.Text 取得這兩個特定字串中的所有文字了 完全不須取得 "列數",因為 Word 中除了表格之外,並沒有 "列" 這個概念
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
mike1000
一般會員 發表:2 回覆:5 積分:1 註冊:2011-06-14 發送簡訊給我 |
首先感謝 sryang 大大的如此快速的回覆,
目前我的做法如下: 假設已取得兩次位置 (Find 巨集), 分別是: start1 = 212, end1 = 218; //(找到第一個句子起點,終點) start2 = 522, end2 = 532; //(找到第二個句子起點,終點) //**最後只要 第一個句子起點 , 及 第二個句子終點 (即所需取得的資料) AnsiString AllSelectStr; //代入程式 vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").OlePropertyGet("Start") = start1 1; vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").OlePropertyGet("End") = end2 - 1; AllSelectStr = vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").OlePropertyGet("Text"); 我有照您的方式取得兩次 Find 的 (start1,end1,start2,end2), 再設定 ActiveWindow.Selection.Start = end1 1; ActiveWindow.Selection.End = start2 - 1; 最後再從 ActiveWindow.Selection.Text 取得這兩個特定字串中間的所有文字,可是回傳的資料卻都只有 一個 "\r" 的值,而不是正確所要擷取的資料,不知何處出現問題,能否請您簡單的寫一小段 code , 示範如何 正確能從第一個至第二個區間所找到的資料傳回給BCB的字串 AllSelectStr, 因為我一直無法正確測試出來, 真是麻煩您了, 感恩!! |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
你有一個小小的筆誤
//代入程式 vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").("Start", end1 1); vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").("End", start2 - 1); AllSelectStr = vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").OlePropertyGet("Text");
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2011-06-19 17:34:58, 註解 無‧
|
mike1000
一般會員 發表:2 回覆:5 積分:1 註冊:2011-06-14 發送簡訊給我 |
再次感謝 sryang 大大不辭辛勞的給予賜教,小弟終於解決這個問題,可以取得所需的文字及圖片資料,但是還有一個小問題,
如下所示: //之前的程式(現在不只侷限取得文字而已) vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").OlePropertySet("Start", end1 1); vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").OlePropertySet("End", start2 - 1); 現在下達 "複製動作" 至 Clipboard vWordApp.OlePropertyGet("ActiveWindow").OlePropertyGet("Selection").OleFunction("Copy"); 然後再 "貼上" View_OleContainer 物件 View_OleContainer->Paste(); //(屬性: SizeMode = smAutoSize, 且已加入 ScrollBox 可上下軸捲看到其他未顯示的資料部分) 理論上應該會把之前 Find 兩次後所選擇的區間資料拷貝進 View_OleContainer 中, 但我發現當選取的資料量較小時貼上是 OK, 而 資料量大時會有後段的某些資料未被貼入 View_OleContainer (截斷), 可是我開啟另一空白 Word 檔, 然後驗證貼上剛才取得的資料 是正常的(量大的資料), 不知為何會有如此狀況發生, 希望能再從旁給予一些協助與指導, 若能解決則此帖也算是可以結案了, 對於 sryang 大的熱心, 小弟覺得萬分感激!! |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
mike1000
一般會員 發表:2 回覆:5 積分:1 註冊:2011-06-14 發送簡訊給我 |
感謝 sryang 大大熱心的幫小弟測試, 是的 RichEdit 確實可以將拷貝的完整資料貼上,
但是因為我的 Word 檔案中除了文字及圖片外,另外還夾雜了其他的方程式符號,而 這些特殊符號卻無法為 RichEdit 所貼上及呈現,所以我才會選用 OleContainer 來作為容器的 物件,但是如果 clipboard 中有了完整的資料, 理論上 OleContainer 也應該會把全部的 資料完整的呈現出來才對, 可是卻發生了資料被截斷的問題, 不知是否在 OleContainer 本身的 設定上有所疏漏呢? 還是這個物件本身有 bug, 希望能經由測試結果得到答案. Thks for your help. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |