求用WORD模版文档+书签替换的方式来实现对WORD文档进行处理的例子?(20分)

  • 主题发起人 主题发起人 TENTODBV
  • 开始时间 开始时间
T

TENTODBV

Unregistered / Unconfirmed
GUEST, unregistred user!
我的WORD模版文档中有许多书签,是用来标记准备插入的内容的位置的。其中一些书签是在复杂的表格中的。请问如何实现利用书签名称找到插入位置,然后插入内容。我找到一个例子,但它不是用WORDAPPLICATION和WORDDOCUMENT控件实现的,编程时输入代码的时候不会智能地弹出对象所支持的方法的列表,对于不熟悉WORD编程的我来说挺不方便的。希望可以找到一个用WORDAPPLICATION和WORDDOCUMENT控件实现的例子。
 
我以前写过一个卫生厅用来处理报告的程序,用来在Word模板中插入各类数据(包括图像),自动生成报告那种。
我现在用的电脑里没有这个代码,需要的话可以拷给你
我用的是替换特殊字符的方式来插入数据,代码不是很复杂,估计就两三百行,也是用WORDAPPLICATION和WORDDOCUMENT控件实现的。
 
to truest9 ,我正在写类似的软件,可否给我一份代码, 谢谢了
我的qq:444094419
邮箱:cxgsliang@yahoo.com.cn
 
书签有两种一种是字符替换,一种是书签的直接替换,我把两种的源代码都给你。。
这个是计量所的报告处理的一部分,开始使用字符替换,后来使用书签替换,原理很简单,核心部分如下。
后面提供了字符替换函数。
注:word2000就是wordApplication.
function TFrmCertificate_Sample.ExCloneWord2000Simple(
FileName: String): Boolean;
var
FWordFile:OleVariant;
Password:OleVariant;
FInstrument:Table;
FCommandBarName,FCommandBar:OleVariant;
//-----------------
OleWhat,OleWhich,OleCount,OleName:OleVariant;
oleRange,OleComfirmCanvesions,OleLink,OleAttachment:OleVariant;
begin
Screen.Cursor:=crHourGlass;
if not DM.SaveToDocTemplet(DM.QWord,FileName) then Exit;
//开启WORD2000
try
Word2000.Connect;
except
ErrMessage('RPC远程接口出错!强烈建议去除杀毒软件的嵌入模式。');
Word2000.Disconnect;
Abort;
end;
//------------- 打开WORD2000------------------
try
FWordFile:=MyFrame.WordFile;
Word2000.Caption:='客户单位:'+MyFrame.ClientName+';'+
'器具名称:'+ed_Apparatus.Text+';'+
'出厂编号:'+ed_OutNo.Text+';'+
'规格型号:'+ed_Mode.Text+';'+
'制造厂商:'+ed_Manufactory.Text;
Word2000.Documents.OpenOld(FWordFile,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
//---------------替换字符---------------
省略。。。
[red] //-------------------添加模板---查找书签并且替换------------
OleWhat:=wdGoToBookmark; OleName:='Content';
OleWhich:=emptyenum; OleCount:=emptyenum;
Word2000.Selection.GoTo_(OleWhat,OleWhich,OleCount,OleName);
oleRange:=''; OleComfirmCanvesions:=False;
OleLink:=False; OleAttachment:=False;
Word2000.Selection.InsertFile(MyFrame.TempFile,oleRange,OleComfirmCanvesions,
OleLink,OleAttachment);[/red] //------显示WORD2000窗口--------------
Screen.Cursor:=crDefault;
Word2000.Visible:=True;
Word2000.ShowMe;
Word2000.WindowState:=wdWindowStateMaximize;
except
on E:Exception do
begin
ShowMessage('出错了,可能需要关闭所有的非法程序...'+#13+'错误号码:'+E.Message);
Word2000.Disconnect;
Exit;
end;//on:E
end;
end;
procedure TFrmCertificate_Sample.Word2000Instrument(var FTable: Table);
var
OleWhat,OleWhich,OleCount,OleName:OleVariant;
FRow,I:Integer;
FLevel:Integer;
begin
[brown] OleWhat:=wdGoToBookmark; OleName:='Instrument';//书签。
OleWhich:=emptyenum; OleCount:=emptyenum;
Word2000.Selection.GoTo_(OleWhat,OleWhich,OleCount,OleName);
FLevel:=Word2000.Selection.Tables.Item(1).NestingLevel;[/brown] if FLevel>1 then
Word2000.Selection.Tables.Item(1).Delete;
插入表格。。。
//----------------
end;

字符替换:
[blue]//procedure Word2000ReplaceText(FSection:Boolean;OldText,ReplaceText:String); //[/blue]保留函数
{
procedure TFrmCertificate_do.Word2000ReplaceText(FSection:Boolean;OldText,
ReplaceText: String);
//fSection表示替换的是否是页眉。。默认为FALSE。
var
OleForword,OleRelaceOption:OleVariant;
OleFindText,OleReplaceText:OleVariant;
begin
OleForword:=wdForward;
OleRelaceOption:=wdReplaceAll;
OleFindText:=OldText;
OleReplaceText:=ReplaceText;
if FSection then
Word2000.Selection.Sections.Item(1).Headers.Item(1).Range.Find.ExecuteOld(
OleFindText,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
OleForword, EmptyParam,EmptyParam,OleReplaceText,OleRelaceOption)
else
Word2000.Selection.Range.Find.ExecuteOld(OleFindText,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,OleForword, EmptyParam,EmptyParam,
OleReplaceText,OleRelaceOption);
end;
}
 
truest9,请也给我寄一份.谢谢
oldice@tom.com
 
to truest9
我的邮箱是 ID123456789@tom.com
 

Similar threads

后退
顶部