|
楼主 |
发表于 2011-7-22 16:34:06
|
显示全部楼层
如何实现套红
=====================
前提:有一个模板表专门存放模板文件;模板文件中主要保存了公文的格式等;通过设置特定标识符来达到替换内容的目的。
=====================
var
lForm : TFRMREDSELECT; //选择红头模板的窗体(自己写一个就行)
lFileName,ltmpFile:String;
begin
//套红
try
lForm := TFRMREDSELECT.Create(context);
if lForm.ShowModal= business.Forms.Controls.mrOk then //选择其中一个模板记录
begin
with InfoBroker.Info.DataSetByID('LCFJ') do //流程附件数据集
begin
{ //过滤数据
SQLFilter:= ' DOCM_TYP ='+ SysUtils.QuotedStr('正文');
SQLFiltered:= true; }
if not Active then open;
lFileName:= FieldByName('ATCH_NM').AsString;//附件名称
ltmpFile:= 'C:\x3tmp'+ FieldByName('DOCM_TYP').AsString ; //存为临时文件,用完后删除
if SysUtils.FileExists(ltmpFile) then
SysUtils.DeleteFile(ltmpFile);
TBlobField(FieldByName('ATCH_CNT')).SaveToFile(ltmpFile);//将附件(正文)保存为文件,以便文件合并
end;
lForm.SaveFile;
lFileName := lForm.FileName;//红头模板文件
if lFileName<>'' then
begin
WordApp1.CreateApp(true);//显示Word进程
WordApp1.OpenFile(lFileName);
WordApp1.SetCaption('我的OA[套红]'); //设置Word显示
WordApp1.ExReplace('#BH', dsFW.DataSet.FieldByName('DOCM_NO').AsString ,1);
//替换#BH编号
WordApp1.ExReplace('#title',dsFW.DataSet.FieldByName('DOCM_TTL').AsString ,1);
//#title--表示标题
//查找到内容标记符号,并且定位
WordApp1.InsertFile('#body',ltmpFile);//'#body'代表文件正文内容,在指定位置插入文件内容
//WordApp1.insertStr('文档内容,多长都可以!');//在当前位置插入要插入的内容
WordApp1.Save(true);
jsdialogs.ShowMsg('“套红”已完成,文件保存到【'+lFileName+'】。请查看后将文件上传!','提示');
dsFW.DataSet.Edit;
dsFW.DataSet.FieldByName('YN_RD_HD').AsString:= '1';//是否带红头
dsFW.DataSet.FieldByName('RD_HD_ID').AsString:= lForm.FileID;//红头ID
end
else begin
jsdialogs.ShowMsg('没有输入文件名称,不能执行套红!','提示');
exit;
end;
end;
finally
lForm.Free;
end;
end; |
|