我正在使用我们的实验室报告系统,并希望自动执行某些任务。我们使用的系统不直观,使用word文档输入数据。标题有几个段落(受保护的标题)。
我想在其中一个段落中复制一个短语,然后使用Delphi应用程序将其粘贴到另一个段落中
GetActiveOleObject('Word.Application');
我如何使用RegEx。好消息是我要复制的可搜索短语是大写的,而其他一切都是句子。例如:
第3段标题:---> Receiver Notes< ----这在文档(受保护)中不可编辑
该样本在此工作站的CONTAINER OF FORMALIN中收到
在该工作站
我的结果必须是:
第4段标题--->接收方法< ------再次保护
FORMALIN的容器< -----这里是我要从第一场比赛中粘贴的地方
没有固定的新鲜< -----这里是第二场比赛......等等
所以我的感觉是要在段落标题" Receiver Note"之间搜索delphi代码。和#34;接收方法"对于大写的人,并在下一段中列出。
我使用delphi xe3,我知道如何使用正则表达式与其他文件,但不是使用delphi的单词。任何输入,代码片段,示例等将非常感谢!
答案 0 :(得分: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;
答案 1 :(得分:0)
作为使用Word(或任何办公应用程序)和ActiveX Delphi组件的一般规则,是使用神奇的宏录制器来查看它是如何做到的。
例如
现在打开宏VBA组织器,查看VBA为您所做的事情生成的代码。这将使您非常了解获取delphi代码所需的函数。