在Delphi中如何实现word文档的录入? ( 积分: 100 )

  • 主题发起人 主题发起人 jiajianbao
  • 开始时间 开始时间
J

jiajianbao

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的数据库是Spl Server 2000,在Delphi中如何实现word文档的录入呢?请各位大侠指点迷经!
 
我用的数据库是Spl Server 2000,在Delphi中如何实现word文档的录入呢?请各位大侠指点迷经!
 
一、Delphi程序启动Word

采用CreateOleObjects的方法来启动Word,调用VBA代码,具体实现过程为:
首先使用GetActiveOleObject('Word.Application')判断当前内存中是否存在Word程序,如果存在,则直接连接,如果没有Word程序,则使用CreateOleObject('Word.Application')启动Word

二、Delphi程序新建Word文稿

格式:WordDocuments.Add(Template,NewTemplate,DocumentType,Visible)
Template: 使用模板的名称,
NewTemplate: 新建文档的类型,True表示为模板,False表示为文档
DocumentType: 文档类型,默认为空白文档
Visible: 打捞的窗口是否可见

举例:Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.dot',NewTemplate:=False);

三、Delphi程序打开Word文稿

格式:WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
PasswordTemplate,Revent,WritePasswordDocument,WritePassWordTemplate,
Format,Encoding,Visible)

FileName: 文档名(包含路径)
Confirmconversions: 是否显示文件转换对话框
ReadOnly: 是否以只读方式打开文档
AddToRecentFiles: 是否将文件添加到"文件"菜单底部的最近使用文件列表中
PassWordDocument: 打开此文档时所需要的密码
PasswordTemplate: 打开此模板时所需要的密码
Revert: 如果文档已经,是否重新打开文档
WritePasswordDocument: 保存对文档更改时所需要的密码
WritePasswordTemplate: 保存对模板进行更改时所需要的密码
Format: 打开文档时所需使用的文件转换器
Encoding: 所使用的文档代码页
Visible: 打开文档的窗口是否可见

举例:

Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=False);

四、Delphi程序保存Word文稿

格式:WordDocuments.SaveAs(FileName, FileFormat, LockComments, Password,
AddToRecentFiles, WritePassword, ReadOnlyRecommended,
EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData,
SaveAsAOCELetter)

FileName: 文件名。默认为当前文件夹和文件名。
FileFormat 文档保存的格式。
LockComments 如果为 True,则此文档只允许进行批注。
Password 打开文档时的口令。
AddToRecentFiles 如果为True,则将文档添至"文件"菜单中最近使用的文档列表中。
WritePassword 保存对文档的修改所需的口令。
ReadOnlyRecommended 如果为 True,在每次打开文档时,Word 将建议用户采用只读方式。
EmbedTrueTypeFonts 如果为 True,则将文档与 TrueType 字体一起保存。
SaveNativePictureFormat 如果为 True,则从其他系统平台(例如 Macintosh)导入的图形仅保存其 Windows 版本。
SaveFormsData 如果为 True,则将窗体中用户输入的数据存为一条数据记录。
SaveAsAOCELetter 如果文档包含一个附加,当此属性值为 True 时,将文档存为一篇 AOCE 信笺(同时保存邮件)。
举例:

Word_Ole.Documents.SaveAs(FileName:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=False);

五、 从数据库读取文件到本地硬盘和从本地硬盘读取文件到数据库

在数据库上使用Image二进制字段保存,使用Stream流的方式。

创建文件流:

Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite or fmCreate);
Word_FileStream.Position:=0;

保存到数据库的Image字段:
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);

从数据库读取文件到本地硬盘:
TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);

释放文件流:
Word_FileStream.Free;
 
看delphi自带的例子吧,很详细
delphi7/..../activex/word8
 
那个很详细吗,都没有字体设置什么的
 
请参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=408500
里面的方法确实可用
注意:
数据库中的IMAGE字段的内容不能用直接Loadfromfile存进去
如果你要用STREAM来读
只能用这种方法保存
var stre:TMemoryStream;
begin
stre:=TMemoryStream.Create ;
ADOQuery1.append;
olecontainer1.SaveToStream(stre);
ADOQuery1DSDesigner4.LoadFromStream(stre);
ADOQuery1.post;
stre.free;
end;
如果用Loadfromfile来存到数据库,用STREAM读取时就会出现:invalid stream format!

环境:DELPHI7+WINXPHE通过
 
ADOQuery1DSDesigner4:TblobStream;
 
可以使用自己创建 TWordApplication,TWordDocument,TWordFont的对象,然后自己写一个类来输出,输出的内容包括数据库中的文字,图片.....

WordApp := TWordApplication.Create(nil);
Doc := TWordDocument.Create(nil);
try
WordApp.Connect;
except
MessageDlg('您的计算机上还未安装Microsoft Office Word97或更高的版本!', mtError, [mbOK], 0);
Abort;
end;

ItemIndex := 1; //OleVariant 类型

Doc.ConnectTo(WordApp.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam)); //创建的空白文档.


//加快速度可以关闭拼写检查
WordApp.Options.CheckSpellingAsYouType := False;
WordApp.Options.CheckGrammarAsYouType := False;

//文字内容的插入
//获得文字内容过程,例如str为获得的文字内容
Doc.Range.InsertAfter(str)

//确定是否预览
............
//最后
WordApp.Disconnect();
Doc.Disconnect();

if Assigned(WordApp) then
FreeAndNil(WordApp);
if Assigned(Doc) then
FreeAndNil(Doc);
======================================================
//对于图片可以采用如下方式

function TExportToWord.PasteImage(doc: TWordDocument): Boolean;
var
AData: THandle;
APalette: HPALETTE;
MyFormat: Word;
pic: TPicture;
begin
Result := False;
pic := TPicture.Create;
try
获得图片过程,pic为要输出的;
if Assigned(Pic) then
begin
Pic.SaveToClipboardFormat(MyFormat, AData, APalette);
ClipBoard.SetAsHandle(MyFormat, AData);
if Clipboard.HasFormat(MyFormat) then
begin
doc.Sentences.Last.Paste;
doc.Range.InsertAfter(' ');
Result := True;
end;
end;
finally
pic.Free;
end;
end;
 
后退
顶部