最近帮同学用Delphi 7写的一个数据库应用中的一个功能是将查询的结果导出到一个Word文档中保存。虽然Delphi 7的Servers面板中提供了TWordApplication和TWordDocument组件,但是帮助中却几乎没有写它们的使用方法。于是在中国期刊网上down了许多的相关文章来看,只可惜几乎都是用Delphi 5写的(Delphi 7中不能兼容),而且都只是简单的介绍了一下,甚是郁闷。在经过一天的摸索之后终于用Delphi 7实现了这个功能。代码如下:
//uses Word2000, ComObj;
//WordApp: TWordApplication;
//WordDoc: TWordDocument;
procedure TfrmDetails.btnExportClick(Sender: TObject); //单击“导出“按钮
var
V:Variant;
Template,NewTemplate,DocumentType,Visible:OleVariant;
itemIndex:OleVariant;
fileName:Olevariant;
NoPrompt,OriginalFormat:OleVariant;
RouteDocument,SaveChanges:OleVariant;
begin
//指定文档的路径和文件名
fileName:='C:\LogAdmin\doc\'+'值班日志'+Trim(DBTextID.Caption)+'.doc';
//如果该日志的对应Word文档已经存在则提示是否覆盖
if FileExists(fileName)=true then
begin
Beep;
if Application.MessageBox('文档已经存在,是否覆盖?','警告',MB_OKCANCEL)=IDCANCEL then
Abort;
end;
//测试当前是否运行了Word 2000
try
V:=GetActiveOleObject('Word.Application');
except
//未运行则运行之
V:=CreateOleObject('Word.Basic');
end;
try
//连接到Word 2000
WordApp.Connect;
except
Beep;
MessageDlg('不能生成文档,请确认是否安装了Word 2000!',mtError,[mbOK],0);
Abort;
end;
//显示Word 2000
WordApp.Visible:=true;
//给调用Add函数使用的实参赋值
Template:=EmptyParam;
NewTemplate:=False;
DocumentType:=wdNewBlankDocument;
Visible:=true;
//调用Add函数
WordApp.Documents.Add(Template,NewTemplate,DocumentType,Visible);
//连接到新建的文档
itemIndex:=1;
WordDoc.ConnectTo(WordApp.Documents.Item(itemIndex));
//文档另存为
WordDoc.SaveAs(fileName);
//开始向Word文档中写入内容
with WordApp.Selection do
begin
Font.Size:=20;
Font.Bold:=2;
Paragraphs.Alignment:=wdAlignParagraphCenter;
TypeText('值班日志详细内容');
TypeParagraph; //换行
TypeParagraph;
Font.Size:=12;
Font.Bold:=0;
Paragraphs.Alignment:=wdAlignParagraphLeft;
TypeText('编号: '+DBTextID.Caption);
TypeParagraph;
TypeText('日期: '+DBTextDate.Caption);
TypeParagraph;
TypeText('温度: '+DBTextT.Caption);
TypeParagraph;
TypeText('湿度: '+DBTextH.Caption);
TypeParagraph;
TypeText('天气: '+DBTextWeather.Caption);
TypeParagraph;
TypeText('值班人: '+DBTextName.Caption);
TypeParagraph;
TypeText('值班时间:'+DBTextTime.Caption);
TypeParagraph;
TypeText('有无异常:'+lbException.Caption);
TypeParagraph;
TypeText('使用工具:');
TypeParagraph;
TypeText(DBMemoTool.Text);
TypeParagraph;
TypeText('现场环境:');
TypeParagraph;
TypeText(DBMemoEnv.Text);
TypeParagraph;
TypeText('记录一: ');
TypeParagraph;
TypeText(DBMemoR1.Text);
TypeParagraph;
TypeText('记录二: ');
TypeParagraph;
TypeText(DBMemoR2.Text);
TypeParagraph;
TypeText('记录三: ');
TypeParagraph;
TypeText(DBMemoR3.Text);
TypeParagraph;
TypeText('备注: ');
TypeParagraph;
TypeText(DBMemoMemo.Text);
TypeParagraph;
end;
//保存文档
NoPrompt:=false;
OriginalFormat:=wdOriginalDocumentFormat;
WordApp.Documents.Save(NoPrompt,OriginalFormat);
//关闭文档
SaveChanges:=wdSaveChanges;
OriginalFormat:=wdOriginalDocumentFormat;
RouteDocument:=false;
WordApp.Documents.Close(SaveChanges,OriginalFormat,RouteDocument);
//断开和Word 2000的连接
WordApp.Disconnect;
MessageDlg('日志内容导出成功!保存为'+fileName,mtInformation,[mbOK],0);
//关闭窗体
frmDetails.Close;
end;