2012-12-05 31 views
0

我正在使用我們的實驗室報告系統,並希望自動執行一些任務。我們使用的系統不直觀,並使用word文檔輸入數據。有幾個段落標題(受保護的標題)。在MS Word中搜索單詞使用RegEx從Delphi中導入到Delphi應用程序的文檔

我想一語中的一個段落複製和使用Delphi應用程序

GetActiveOleObject('Word.Application'); 

如何使用正則表達式爲它粘貼到另一個段落。好東西是我想複製的可搜索短語是大寫,而其他所有內容都是大寫。例如:

第三段落標題:--->接收機注< ----這不是

  1. 將標本容器福爾馬林接收在該工作站

    文檔(受保護的)的可編輯
  2. 標本接收煥發出無固定在該工作站

我的結果必須是這樣的:

第四段標題--->接收<的方法------再次保護

  1. 集裝箱福爾馬林<的-----這裏就是我想從第一場比賽粘貼

  2. WITH NO固定< -----這裏的第二場比賽FRESH ...等

所以我的感覺是有一個Delphi代碼在段落標題「接收者註釋」和「接收方法」之間搜索大寫字母,並在下一段中列出。

我使用delphi xe3,我知道如何使用正則表達式與其他文件,但不使用delphi的單詞。任何輸入,代碼片段,例子等將非常感謝!

+0

你會更好的使用Word Automation,而不是試圖用正則表達式來做這件事(Word文檔使用格式化信息進行編碼,所以你必須首先提取文本)。藉助Word自動化,您可以使用Word VBA對象模型輕鬆訪問整個段落(或任何段落組),並輕鬆訪問各條線路,該模型有很好的文檔記錄。 –

+0

你在那裏好點。我在字自動化方面的經驗非常有限。你可以給我一個例子嗎? – user1817376

+0

這是一個非現場的例子列表[一](http://www.djpate.freeserve.co.uk/AutoWord.htm#HowDoI)。請參閱組件面板中「服務器」選項卡上的「TWordApplication」和「TWordDocument」組件。那些應該讓你開始,一旦你有一個想法在這裏問什麼,有些人對Office自動化和Delphi很瞭解,在這裏回答問題。 (我會爲你的問題添加通用的'delphi'標記,並省略'delphi-xe3',除非你的問題是特定於版本的。大多數非FireMonkey或XPlatform相關的東西都是通用的。) –

回答

2

好吧我終於得到這個工作,我張貼代碼,如果有人需要這個。我不得不把文件複製到我的delphi備忘錄,並用正則表達式在那裏工作,然後將其粘貼回我想要的地方。雖然這個過程看起來很麻煩,但執行速度非常快。無論如何,我一起工作的文檔通常是一兩頁。

procedure TForm1.Button1Click(Sender: TObject); 
var 
    DXRANGE, DXWORD: OleVariant; 
    n : Integer; 
    regexpr: TRegEx; 
    Match: TMatch; 
begin 
    try 
    DXWORD := GetActiveOleObject('Word.Application'); 

    DXRANGE := DXWORD.Documents.Item(1) 
     .Range(DXWORD.Documents.Item(1).Range.Start, DXWORD.Documents.Item(1) 
     .Range.End); 
    DXRANGE.Copy; 
    Memo1.Clear; 
    Memo1.PasteFromClipBoard; 
    regexpr := TRegEx.Create('\b[A-Z][A-Z][A-Z]+(?:\s+[A-Z]+)*\b'); 
    Match := regexpr.Match(Memo1.Text); 
    n := 1; 
    Memo2.Clear; 
    while Match.Success do 
    begin 
     Memo2.Lines.Add(IntToStr(n) + Match.Value); 
     Memo2.Lines.Add(''); 
     Match := Match.NextMatch; 
     n := n + 1; 
    end; 
    Memo2.SelectAll; 
    Memo2.CopyToClipboard; 
    DXWORD.Selection.PasteSpecial(wdPasteRTF) 
    except 
    on E: exception do 
    begin 
     ShowMessage(E.Message); 
    end; 
    end; 
end; 
0

一般情況下使用Word(或任何Office應用程序)和ActiveX Delphi組件工作時,是用驚人的宏錄製,看看它是如何做到這一點。

例如。

  • 打開Word文檔
  • 從工具菜單中選擇[記錄宏]
  • 做你的搜索
  • 它複製到剪貼板
  • 替換代碼
  • 做其他你需要去做。
  • 停止宏

現在打開宏VBA組織者,並期待在VBA已經爲你做了什麼生成的代碼。這會給你一個很好的想法,讓你可以調用你的delphi代碼。

+0

是的,我通常在幾周前才瞭解到這一點。我試圖通過使用啓用的野生類型記錄宏來記錄單詞是如何執行的。但記錄的宏沒有幫助。感謝您的輸入! – user1817376

相關問題