求教:(50分)

  • 主题发起人 主题发起人 月魔
  • 开始时间 开始时间

月魔

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样才能实现在Word中的指定位置添加数据库中的内容。

XXX:字段1

XXXXXXXXX
字段2 XXXXXXXXXXXXXXXXXXXXXXXX 字段3 XXX
XXXXXXXXXXXXXXXXXXXX 字段4 XXXXXXXXXX。

XXXXXXXXXXXXXXXX
字段5

如果查询出的结果有多条,应该怎么实现?
先谢谢了,急用!!!
 
word文档不公开
找M$
 
什么意思?
 
这个问题应该不是很难吧???为什么还没人回答???拜托各位大侠了,我急用~~~~
 
找了资料,都说不可能实现你的要求!
这个基本上很难!
 
嗯-好象用OLE实现呀:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables, OleCtnrs, ExtCtrls;
type
TOleF = class(TForm)
ole: TOleContainer;//TOleContainer, 它在delphi的system页!

Table1: TTable;
Panel1: TPanel;
Panel2: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
OleF: TOleF;
implementation
{$R *.DFM}
procedure TOleF.Button1Click(Sender: TObject);
var
oletest:Tstream;
begin
//新建OLE对象为用户编辑用
table1.open;
oletest:=table1.CreateBlobStream(table1.FieldbyName('blob'),bmread);
ole.CreateObject('word.document',false);
ole.DoVerb(ovshow);
oletest.free;
end;

procedure TOleF.Button2Click(Sender: TObject);
var stre:TMemoryStream;
begin
// ole对象中的内容写入到数据库中
table1.Edit;
table1.Append;
stre:=TMemoryStream.Create ;
ole.SaveToStream(stre);
TBlobField(table1.FieldbyName('blob')).LoadFromStream(stre);
ole.doverb(ovshow);
table1.post;
stre.free;
end;

procedure TOleF.Button3Click(Sender: TObject);
begin
ole.close; //关闭ole
end;

procedure TOleF.Button4Click(Sender: TObject);
begin
close; //退出本界面
end;

procedure TOleF.Button5Click(Sender: TObject);
VAR
oleDY:Tstream;
begin
//调用OLE对象为用户编辑用
table1.open;
table1.RecNo:=1;
oleDY:=table1.CreateBlobStream(table1.FieldbyName('blob'),bmread);
OLE.LoadFromSTREAM(OLEDY);
ole.DoVerb(ovshow);
oleDY.free;
end;

end.

存盘退出:
var Stre:tmemorystream;
begin
Stre:=TMemoryStream.Create ;
Ole.SaveToStream(stre);
Table1.edit;
TBlobField(Table1.FieldbyName('blob1')).LoadFromStream(stre)
Table1.post;
Stre.free;
Ole.close;
Form.close;
end;


 
不用OLE行不行????能不能用Delphi直接控制WORD里的坐标(行, 列)。假设打开的WORD是个模板,如果有多条数据的话,怎么让WORD自动添加本身的模板和从数据库中提取出来的记录?????
 
我觉得应该有更好点的办法·所以先不结贴。提前散分
 
给你一个最好的方法:参照下面的代码,在你需要插入数据库字段的地方增加一个
书签,书签的名字最好和字段名相同,你看看代码就明白了。
function TFrmD_WireWork_Record.PrintBdeDs(
fieldNameArray: array of TRecorder;
fieldcount: integer): integer;
var
i:integer;
WordApp,WordDoc:variant;
template,newtemplate,itemIndex:OleVariant;
strAlready: string;
begin
// 1 打开Word97,并显示
WordApp:= CreateOleObject('Word.Application');
WordApp.Visible:=false;
WordApp.Documents.Add(template,newTemplate);;
// 3 选择指定的Doc文件
itemIndex:=1;
WordDoc:=WordApp.Documents.Item(itemindex);

// 7 根据Word模板中的书签名称,确定插入书签指定的字段值
for i := 0 to fieldcount-1 do
begin
If WordDoc.Bookmarks.Exists(fieldNameArray._Nbr) = True Then
begin
template:=fieldNameArray._Nbr;
//光标定位在Bookmark=fieldNameArray上;
WordDoc.Bookmarks.Item(template).select;
//从数据集adoPrintDs取得待打印的字段数据,插入书签后面
if FieldNameArray._Name <> Null then
WordApp.Selection.InsertAfter(trim(fieldNameArray._Name));
end;
end;

Result:=1;
WordApp.Visible:= True;

end;
 
试一下!
顺便结贴 ~~
不管行不行就这样了,还是用笨点的方法吧!
谢谢各位!
 
多人接受答案了。
 
后退
顶部