注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 负载均衡技术沙龙问答汇集
 帮助

Delphi + Word = 数据库 + 公文处理


2008-04-01 14:11:16
 标签:数据库 Delphi Word   [推送到技术圈]

delphi擅长做数据库类的mis开发,但对于oa就有点力不从心了。不过随着microsoft的com技术逐渐成熟,现在普通windows应用已经可以和office 97无缝结合了,尤其是在delphi 5中提供了一组servers组件,更是简化了程序开发。 

最近接触了一个用户的案例,用delphi控制word做一个合同管理程序。办公人员先根据业务需要,写好合同的文字,但在用户名称、产品名称等变化的位置填写指定的标记字符串,然后通过delphi把数据库中的实际数据替换掉word中的文字,最后让word打印出合同。 

delphi自带了一个简单的word例题,但功能太简单。通过查找vba的说明,再对照delphi的vcl,编写了如下代码,实现了基本的公文管理功能。 

启动word时用如下代码: 
begin
try 
wordapplication.connect; 
except 
messagedlg('word may not be installed', mterror, [mbok], 0); 
abort; 
end; 
wordapplication.visible := true; 
wordapplication.caption := 'delphi automation'; 
end; 

关闭word用如下代码。如果想保存doc文件,请修改savechanges变量的内容: 
var 
savechanges, originalformat, routedocument: olevariant; 
begin 
savechanges := wddonotsavechanges; 
originalformat := unassigned; 
routedocument := unassigned; 
try 
wordapplication.quit(savechanges, originalformat, routedocument); 
wordapplication.disconnect; 
except 
on e: exception do 
begin 
showmessage(e.message); 
wordapplication.disconnect; 
end; 
end; 
end; 

让word打开一个指定的文件,需要先放置opendialog,然后调用wordapplication.documents.open: 
var 
itemindex :olevariant; 
filename, confirmconversions, readonly, addtorecentfiles, 
passworddocument, passwordtemplate, revert, 
writepassworddocument, writepasswordtemplate, format: olevariant; 
begin 
if not dlgopen.execute then 
exit; 

{open document} 
filename := dlgopen.filename; 
confirmconversions := false; 
readonly := false; 
addtorecentfiles := false; 
passworddocument := ''; 
passwordtemplate := ''; 
revert := true; 
writepassworddocument := ''; 
writepasswordtemplate := ''; 
format := wdopenformatdocument; 

wordapplication.documents.open( filename, confirmconversions, 
readonly, addtorecentfiles, passworddocument, passwordtemplate, 
revert, writepassworddocument, writepasswordtemplate, format ); 

{assign worddocument component} 
itemindex := 1; 
worddocument.connectto(wordapplication.documents.item(itemindex)); 

{turn spell checking of because it takes a long time if enabled and slows down winword} 
wordapplication.options.checkspellingasyoutype := false; 
wordapplication.options.checkgrammarasyoutype := false; 
end; 

让word替换标记字符串要使用worddocument.range.find.execute,这里用delphi替换了< #name> : 
var 
findtext, matchcase, matchwholeword, matchwildcards, matchsoundslike, 
matchallwordforms, forward, wrap, format, replacewith, replace: olevariant; 
begin 
findtext := '< #name> '; 
matchcase := false; 
matchwholeword := true; 
matchwildcards := false; 
matchsoundslike := false; 
matchallwordforms := false; 
forward := true; 
wrap := wdfindcontinue; 
format := false; 
replacewith := 'delphi'; 
replace := true; 

worddocument.range.find.execute( findtext, matchcase, matchwholeword, 
matchwildcards, matchsoundslike, matchallwordforms, forward, 
wrap, format, replacewith, replace ); 

end; 

上面这4段代码完成了公文管理的基本功能,再把它和数据库结合起来,就可以开发一个与lotus notes类似的产品了。 




    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: