如何将DB数据库内容自动填入到WORD模板中的表格中?(100分)

  • 主题发起人 主题发起人 sunhw
  • 开始时间 开始时间
S

sunhw

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用DELPHI建立了数据库,同时我在WORD中建立了一个含表格的模板,现在我想通过ole
对象将数据输入到这个模板中,当模板表格中数据填满后,自动新建一个包含该表格的新页
继续填入数据(如何根据模板内容新建空页),直到数据库内容填完,然后将生成的WORD文
档保存到特定目录。如何实现呢?
 
既然是网格,用 Excel 更方便。查一下以前的贴子吧
 
我不太明白你为什么要用ole对象其实可以不用ole对象的。
具体做法如下:
先在server页放入wordapplication控件 取名为wa1 先让wa1连上摸版文件(含表格的
word摸版)
var table:olevariant;
str1:variant;
begin
table:=wa1.documents.items(1)//去摸版的第一个表格。
str1:=adotable1.Fields[24].AsVariant ;//从数据库中取相应的字段的值。
table.cell(1,1).range.text:=str1 //表格的你需要的位置放入该字段的内容
end;
以上代码应该能够满足你的要求了!
 
To xiao_wen: 你的做法没用到OLE 对象吗?
 
To Crab
不需要用Ole 对象的,用Server页的Wordapplication 和Worddocument 就可以了
当然用ole对象也可以的!但不管用什么 都需要在你的数据库中把定义blob字段
因为只有blob字段才能存放word文档的!(而blob字段也有限制好象是不超过10M的东西)

我作的代码如下:
unit oletest;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables, OleCtnrs, ExtCtrls, Buttons, Menus;

type
TForm5 = class(TForm)
ole: TOleContainer;
Panel2: TPanel;
Panel1: TPanel;
MainMenu1: TMainMenu;
N1: TMenuItem;
procedure FormShow(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form5: TForm5;

implementation
uses unit3;
{$R *.DFM}


//从数据库中调用。会打开word编辑文件。
procedure TForm5.FormShow(Sender: TObject);
var oleDY:Tstream;
begin
if form5.tag=1 then
oleDY:=form3.basic.CreateBlobStream(form3.basic.FieldbyName('blob1'),bmread)
else //basic是一个表放在form3中
oleDY:=form3.basic.CreateBlobStream(form3.basic.FieldbyName('blob2'),bmread);
if oledy.size>0 then
begin
OLE.LoadFromSTREAM(OLEDY);
ole.DoVerb(ovshow);
oleDY.free;
end
else
begin
ole.CreateObject('word.document',false);
ole.DoVerb(ovshow);
end;

end;

//存盘退出
procedure TForm5.N1Click(Sender: TObject);
var stre:tmemorystream;
begin
stre:=TMemoryStream.Create ;
ole.SaveToStream(stre);
form3.basic.edit;
if form5.tag=1 then
TBlobField(form3.basic.FieldbyName('blob1')).LoadFromStream(stre)
else
TBlobField(form3.basic.FieldbyName('blob2')).LoadFromStream(stre);

form3.basic.post;
stre.free;
ole.close;
form5.close;
end;
end.

本程序是数据库的用ole打开很存取,然后至于把word表格中的数据存入到数据库中你可以用
我上面的方法
var table:olevariant;
str1:variant;
begin
table:=wa1.documents.items(1)//去摸版的第一个表格。
str1:=adotable1.Fields[24].AsVariant ;//从数据库中取相应的字段的值。
table.cell(1,1).range.text:=str1 //表格的你需要的位置放入该字段的内容
end;

然后存盘退出就可以了!!!(有什么问题再说吧)
 
恩,看了一下 Server 页的对象,看帮助文件,原来它们是通过与 word/excel 这些
COM Server连接进行操作的,没有包含 ComObj单元。
我以前操作 Word 时,用 CreateOLEObject 方法建立一个 word application 进行操作,
这与使用 Server 页的 wordApplication 有什么区别呢?
 
To Crab :
建议你看看word的帮助文件,里面有!
 
简单的方法!!!!!!!!!!!!
在WORD中运行以下宏---创建一个表格。
将宏代码COPY出来,粘贴到DELPHI程序中,做少许改动即可使用。
当然,在这之前,需要象XIAO_WEN那样,用SERVER中的WORD空间将WORD打开。
 
to 刃血:
在新建宏时如何知道表格已满一页,
需要在新页中建立一个新的表头,
大家能否讨论讨论?
 
/delphi5/demos/activex/oleauto/word8
关键是,你要对office vba比较熟悉。
 
好象有个相关源码
给TINGWEB@WX88.NET发个话,我帮你找找
 
这个问题:
当模板表格中数据填满后,自动新建一个包含该表格的新页
继续填入数据(如何根据模板内容新建空页)?
好像没人问荆,请高手指教指教!!!
 
请继续或结束
 
请继续或结束
 
时间太久强制结束
 
后退
顶部