利用OLE自动化实现word文档编辑,将编辑结果输入数据库,然后将数据库(用SQL Server系统)中的内容读出并在word中形成多页文档打印输出(200分)

  • 主题发起人 主题发起人 chinese roc fen
  • 开始时间 开始时间
C

chinese roc fen

Unregistered / Unconfirmed
GUEST, unregistred user!
我学习DELPHI仅有两个月,但是由于赶上毕业设计,不得已必须用DELPHI来编写
一个对于我来说规模较大的程序.我的设计题目是<通用试题库的设计与实现>,
按照老师的建议,我决定采用SQL Server数据库管理系统,由于是一种通用的
试题库,因此所要输入的试题是一种图文混排文档,所以想利用OLE 自动化操纵
WORD来实现试题的输入,得到的文档输入到数据库中.以后利用试题库中的试题
来自动形成试卷,生成的试卷发送到WORD中形成多页文档以便打印输出.但是
我对于OLE自动化的了解仅有一点点,同时对于数据库中用什么类型的字段来
保存WORD中形成的文档也不会.
上面我介绍了自己的基本情况,现在我提出我的帮忙请求:
请那位高手帮忙告诉我如何利用WORD自身的类型库来操纵WORD,如何实现将WORD文档输入到数据库中,以及如何将从数据库中读出的内容发送到WORD中形成多页文档以便打印输出.另外我还想请教诸位高手,DELPHI的程序结构中,写在接口部分的USES语句所包含的单元是如何确定的.对于OLE自动化部分的回答我希望您
能给我提供完整的源代码.
虽然我才进入次论坛不久,分数太少,但是由于任务太重,我愿意拿出200分来请
那位高手帮我解答,您的答案请放在论坛上以便我日后可以查看,急切的盼望得到回答!!!
 
看这里 pipi的答案。
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=206358
 
使用OLE有很多方法,可以直接创建OLE对象,也可以用DELPHI5带的SERVER组件。
使用SERVER组件的代码我以前写过,给你参考:
var Template, TempFalse, ItemIndex, Filename,
FileFormat, Filename2,
SaveChanges, OriginalFormat, RouteDocument: OleVariant;
begin
Template := EmptyParam;
TempFalse := false;
ItemIndex := 1;
......
try
Wordapplication.Connect;
except
ShowMessage('无法启动Word。请检查是否已安装。');
Abort;
end;
Wordapplication.Visible := false;
WordApplication.Caption := Application.Title;
{Open a document}
WordApplication.Documents.Open(Filename,Template,TempFalse,TempFalse,Template,
Template,Template,Template,Template,Template);
{Assign WordDocument component}
WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex));
// ****************** Save As ***********************
try
WordDocument.SaveAs(Filename2, FileFormat);
except
ShowMessage('无法保存文档。请检查WORD是否被关闭。');
end;
// ****************** Close Document ***********************
SaveChanges := WdDoNotSaveChanges;
OriginalFormat := UnAssigned;
RouteDocument := UnAssigned;
try
WordApplication.Quit(SaveChanges, OriginalFormat, RouteDocument);
WordApplication.Disconnect;
except
ShowMessage('无法关闭文档。请检查WORD是否异常。');
end;

控制WORD很容易,就象:
WordApplication.Caption := Application.Title;
这样就能控制WORD的标题。控制内容你也就会了吧!

如果要放到数据库,你可以用ADO组件。小的东西可以放到CHAR字段里面,大的图片
和文字放到BLOB字段里面。

关于USES,是指公用的单元。你的程序中用到什么单元就加什么。每个对象属于
什么单元,你看它的帮助。帮助中的“UNIT”下面就是它的单元。
 
我现在的毕业设计跟你一样,不知道你解决了这个问题了吗?可否来信讨论一下,我的email 是bjwxhz@163.com
 
在sql server 中我用image字段存word文档,以流的方式存入,我用其他字段会出
错的,不知其他大虾有没有更好的见解。
 
xxxx.CopyToClipboard;
WordDocument.Sentences.Last.Paste;

WordDocument.Range.InsertAfter('Common Name: ' + Table.Fields.Fields[2].AsString + #13);
 
把文件写入 Blob 字段:
procedure TForm1.btnSaveClick(Sender: TObject);
var
FStream: TFileStream;
BStream: TBlobStream;
begin
if not OpenDialog1.Execute then exit;
FStream := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
Table1.Edit;
BStream := TBlobStream.Create(Table1Doc,bmReadwrite);
BStream.CopyFrom(FStream,FStream.Size);
Table1.Post;
BStream.Free;
FStream.Free;
btnReadDoc.Enabled := false;
btnReadPic.Enabled := false;
end;
至于操作 Word,很简单,admins 的方法就行。请查看 office/Vbawd8.hlp文件。
 
这个问题比较有用!
 
接受答案了.
 
后退
顶部