如何将dbgrid中的数据插入已经存在的word文档的一个已经建立好的表中?

YAMABACK 2003-03-19 02:58:10
word文档已经打开了,表是事先见好的,字段与dbgrid的字段一一对应
...全文
27 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kerisyml 2003-03-19
  • 打赏
  • 举报
回复
对Word模板定义标签
然后在程序中给标签写数据OK
procedure TForm1.Button4Click(Sender: TObject);
var
WordApp,DocApp:OleVariant;
BookMark_Name: string;
begin
try
WordApp := CreateOleObject('Word.Application');
except
Exit;
end;
WordApp.Visible := True;
DocApp:=WordApp.Documents.Open('C:\公安交通管理撤销决定书.dot');

//赋值
BookMark_Name := 'test'; //标签
DocApp.Application.Selection.goto(What := wdGoToBookmark, Name := BookMark_Name);
DocApp.Application.Selection.Text := '这个是替换test的结果';

end;
thinkcat 2003-03-19
  • 打赏
  • 举报
回复
我没有做过,给个文章你看看吧,好像有帮助

向word文档中输出表格及图形
free_card(原作)

关键字 word



工作中遇到一个软件开发项目,该项目要求将相关数据报表存为word格式文档(涉及表格、图形的输出),便于用户修改。

本人在开发过程中,发现此类资料较少,且介绍相对简单,大多只是文本数据的的简单输出。现将个人摸索出的一些方法及心得体会告诉大家,以求共同探讨,共同提高!



form上放置以下控件:一个Tadoquery组件,名称为ADOQuery1;

一个TWordFont组件,名称为WordFont1;

一个TWordApplication组件,名称为WordApplication1;

一个TWordDocument1组件,名称为Doc;

一个TWordParagraphFormat组件,名称为ParaFmt;

一个TIMAGE组件,名称为IMAGE1;

一个TBUTTON组件,名称为Button1;







procedure TFrm_TravilRDXL.EnterText;//自定义函数

var

S: Selection;

MyFormat : Word;

// Bitmap : TBitMap;

AData :cardinal;

APalette : hpalette;



begin

S := WordApplication1.Selection;

WordFont1.ConnectTo(S.Font);



S.TypeText('甘肃省兰州市旅游管理局热点线路统计表');

//加回车键,形成第一个段落:Doc.Paragraphs.Item(1)



S.TypeParagraph;



//输入文字

S.TypeText(txt_DateFrom.Text+'至'+txt_DateTo.text);

//加回车键,形成第二个段落:Doc.Paragraphs.Item(2)

S.TypeParagraph;



S.TypeText('使用部门:'+'销售部'+#13);

S.TypeText('时间范围:'+'2002-8-8至2002-8-28'+#13 );

S.TypeText('线路类型:'+'团体线'+#13);

s.TypeText('线路等级:'+'豪华线'+#13);

//加回车键,形成第三个段落:Doc.Paragraphs.Item(3)

S.TypeParagraph;





//--------------------------设置段落1属性-------------------//

ParaFmt.ConnectTo(Doc.Paragraphs.Item(1).Format);

//绑定WordFont1与Doc.Paragraphs.Item(1).Range.Font



WordFont1.ConnectTo(Doc.Paragraphs.Item(1).Range.Font);

//设置段落对齐方式

ParaFmt.Alignment := wdAlignParagraphCenter;

//设置段落行距(磅)

ParaFmt.SpaceAfter := 24;



//画单水平线

ParaFmt.Borders.Item(3).LineStyle := wdLineStyleSingle;

WordFont1.Size := 18;

WordFont1.Name := 'Arial';

WordFont1.Bold := integer(True);

WordFont1.ColorIndex:=5; //粉红色字体



//--------------------------设置段落2属性-------------------//

ParaFmt.ConnectTo(Doc.Paragraphs.Item(2).Format);

//绑定WordFont1与Doc.Paragraphs.Item(1).Range.Font



WordFont1.ConnectTo(Doc.Paragraphs.Item(2).Range.Font);

//设置段落对齐方式

ParaFmt.Alignment := wdAlignParagraphCenter;

//设置段落行距(磅)

ParaFmt.SpaceAfter := 12;

WordFont1.Size := 18;

WordFont1.Name := 'Arial';



end;





procedure TFrm_TravilRDXL.Button1Click(Sender: TObject);

var

i,j:integer;

begin

i:=2;//初始化

j:=1;



WordApplication1.Connect;



Doc.ConnectTo(WordApplication1.Documents.Add(EmptyParam, EmptyParam));

WordApplication1.Visible := True;//显示word文档



EnterText;//自定义函数---添加文本





WordApplication1.Selection.SetRange(100,100);//设定段落范围





doc.Tables.Add(WordApplication1.Selection.Range,ADOQuery1.RecordCount+1,5);//创建表格



doc.Tables.Item(1).Columns.Item(1).Width:=120;//设定第一列宽度



//--------------------------设定第一列字体属性-----------------------//



while j<6 do begin

doc.Tables.item(1).cell(1,j).Range.Bold:=integer(true);

WordFont1.ConnectTo(doc.Tables.item(1).cell(1,j).Range.Font);

WordFont1.ColorIndex:=10;

j:=j+1;

end;

//--------------------------向表格中添加数据----------------------------------------//

doc.Tables.Item(1).Cell(1,1).Range.Text:='线路名称';

doc.Tables.Item(1).cell(1,2).Range.text:='人数';

doc.Tables.item(1).cell(1,3).Range.text:='销售额(元)';

doc.Tables.item(1).cell(1,4).Range.text:='毛利润';

doc.Tables.Item(1).cell(1,5).Range.text:='毛利润率';

while not ADOQuery1.Eof do begin



doc.Tables.Item(1).Cell(i,1).Range.Text:=ADOQuery1.fieldbyname('linename').asstring;

doc.Tables.Item(1).cell(i,2).Range.text:=ADOQuery1.Fieldbyname('STUFFNUM').asstring;

doc.Tables.Item(1).cell(i,3).Range.text:=ADOQuery1.Fieldbyname('TOTALACCOUNT').asstring;

doc.Tables.Item(1).cell(i,4).Range.text:=ADOQuery1.Fieldbyname('TOTAL').asstring;

doc.Tables.Item(1).cell(i,5).Range.text:=ADOQuery1.Fieldbyname('ration').asstring;

ADOQuery1.Next;

i:=i+1;



end;



//----------------------------------------------------------------------//



WordApplication1.Selection.SetRange(350,350);//设定段落范围

ParaFmt.ConnectTo(WordApplication1.Selection.Paragraphs.item(1).Format);

ParaFmt.Borders.Item(3).ColorIndex:=6;

ParaFmt.Borders.Item(3).LineStyle:=wdLineStyleSingle;//画底线



//-----------设置段落字体----------------------------------------//

WordFont1.ConnectTo(WordApplication1.Selection.Paragraphs.Item(1).Range.Font);

WordFont1.Bold:=integer(true);

WordFont1.Size:=16;



//-----------------------------粘贴图形-------------------------//

Image1.Picture.SaveToClipboardFormat(MyFormat,AData,APalette);

Clipboard.SetAsHandle(MyFormat,AData);

doc.Sentences.Last.Paste;


/--------------------------插入记录-------------------------------------//

doc.Range.InsertAfter(#13+'操作员:'+ G_username);//G_username为全局变量
end;


YAMABACK 2003-03-19
  • 打赏
  • 举报
回复
如何给已有的表格添加行和列呢?解决这个问题就可以了
thinkcat 2003-03-19
  • 打赏
  • 举报
回复
你说的这个需要对WORD文档定位,恐怕有点难度吧

看看这个有没有帮助
如何使用 Delphi 给 word 增加表格

现有一个模板文件 aaa.dot.
里面有一个表格,形式如
+------+-------------------------------------------
|姓名:|网重
|---------------------------------------------------
|简历:
+-------------------------------------------------
|-------------------------------------------
现在需要简历下面的单元格中动态插入一个表格(两列,行数由数据库中的数据决定)
现在代码写了如下:

..try
WordApp := CreateOleObject('Word.Application');
MyDoc := CreateOleObject('Word.Document');
except
Raise Exception.Create('无法打开Word,请确认已安装Word。');
end;

WordApp.Visible := true;
MyDoc := WordApp.Documents.Add(FileName,false);

MyDoc.BookMarks.Item('简历表').Select;
WordApp.Selection.Text := Edit1.Text+'的个人简历';
wTable := MyDoc.Tables.Item(1);

wtable.cell(3,1).Range.Text :='个人简历';
wtablenew:=wtable.cell(3,1).tables.Add(wtable.cell (3,1).range,10,10,wdWord9TableBehavior,wdAutoFitFixed);

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧