用delphi向word写入文字和表格问题(100分)

  • 主题发起人 主题发起人 zqqxh
  • 开始时间 开始时间
Z

zqqxh

Unregistered / Unconfirmed
GUEST, unregistred user!
我已用word写好了一个模板,里面放了固定的格式,并定义了很多相应的书签,
现在的问题是如何向word文档里对应的书签中加入相应的数据并设置的字体。
最好能给出例子。
 
这种问题已经很多了,楼主可要出冤枉花费了,思路如下:
在Word中,使用记录宏命令的功能,按你想要实现的执行
一遍,然后打开该宏命令文件,阅读里面的内容就可以
了,然后在Delphi中实现。不过,得懂一些VBA更好。
 
to:chnplzh
我就是对VBA知道得很少,连在word的模板中如何定义域(指定域名)并在delphi中定位
到这个域也没有头绪,所以才用书签。要求各位富翁最好给出代码例子。
提出这个问题之前我已搜索过以前很多贴,但没有找到哪个完整并理想的。

 
VBA我也不熟悉,但是,你想完成你的想法,没招,
花点时间去好好啃一下,应该很快的,VBA并不难。
 
fastreport不知可否导出到word?
 
给你一个我刚刚编写的例子,你自己研究:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure InsertLines(LineNum:Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
wordApp,wordDoc:Variant;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses ComObj;

Const wdAlignParagraphLeft=0;
Const wdAlignParagraphCenter=1;
Const wdAlignParagraphRight=2;
Const wdAlignParagraphJustify=3;
Const wdAdjustNone=0;
Const wdGray25=16;
Const wdGoTOLine=3;
Const wdGoToLast=-1;
Const wdSendToNewDocument=0;

{$R *.DFM}

//在文档中插入空行
procedure TForm1.InsertLines(LineNum:Integer);
var
iCount:Integer;
begin
for iCount:=1 to LineNum do
wordApp.Selection.TypeParagraph;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
StrAdd:String;
i:Integer;
wrdSelection:Variant;
begin
//创建一个word对象
wordApp:=CreateOleObject('Word.Application');
wordApp.Visible:=true;
//创建一个word文档
wordDoc:=wordApp.Documents.Add();
wordDoc.Select;

wrdSelection:=wordApp.selection;

//在文档中插入内容
StrAdd:='教务管理员职务说明书';
wrdSelection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;
wrdSelection.font.bold:=true;
wrdSelection.font.size:=15;
wrdSelection.font.Underline:=1;
wrdSelection.TypeText(StrAdd);

wrdSelection.font.Underline:=0;
wrdSelection.font.bold:=false;
wrdSelection.font.size:=11;
InsertLines(1);

//在文档中插入一个4行4列的表格,并格式化
wordDoc.Tables.Add(wrdSelection.Range,4,4,2,0);
wordDoc.Tables.Item(1).Borders.Item(1).LineStyle:=7;
wordDoc.Tables.Item(1).Borders.Item(2).LineStyle:=7;
wordDoc.Tables.Item(1).Borders.Item(3).LineStyle:=7;
wordDoc.Tables.Item(1).Borders.Item(4).LineStyle:=7;
for i:=1 to 4 do
begin
wordDoc.Tables.Item(1).Cell(i,1).Range.Bold:=true;
wordDoc.Tables.Item(1).Cell(i,3).Range.Bold:=true;
wordDoc.Tables.Item(1).Rows.Item(i).Range.Paragraphs.Alignment:=wdAlignParagraphCenter;
end;
//在第一个表格中插入内容
wordDoc.Tables.Item(1).Cell(1,1).Range.text:='岗位名称';
worddoc.tables.item(1).cell(1,2).range.InlineShapes.AddPicture('E:/heartsong/0003.gif',False,True);
wordDoc.Tables.Item(1).Cell(2,1).Range.InsertAfter('岗位级别');
wordDoc.Tables.Item(1).Cell(3,1).Range.InsertAfter('隶属部门');
wordDoc.Tables.Item(1).Cell(4,1).Range.InsertAfter('直接上级');
wordDoc.Tables.Item(1).Cell(1,3).Range.InsertAfter('岗位编号');
wordDoc.Tables.Item(1).Cell(2,3).Range.InsertAfter('现任职者');
wordDoc.Tables.Item(1).Cell(3,3).Range.InsertAfter('分支机构');
wordDoc.Tables.Item(1).Cell(4,3).Range.InsertAfter('直接下级');

//插入一个5行一列的表格:工作概述
wordApp.Selection.GoTo(wdGotoLine,wdGoToLast);
wrdSelection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

wordDoc.Tables.Add(wrdSelection.Range,1,1,2,0);
wordDoc.Tables.Item(1).Rows.Item(5).Range.Paragraphs.Alignment:=wdAlignParagraphLeft;

wrdSelection.Font.Bold:=true;
wrdSelection.Font.Size:=13;
wrdSelection.TypeText('一、工作概述:');
wrdSelection.font.bold:=false;
wrdSelection.Font.Size:=11;
wrdSelection.TypeText(chr(10)+'一些内容');

//插入一个5行一列的表格:主要工作职责
wordApp.Selection.GoTo(wdGotoLine,wdGoToLast);
wrdSelection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

wordDoc.Tables.Add(wrdSelection.Range,1,1,2,0);
wordDoc.Tables.Item(1).Rows.Item(6).Range.Paragraphs.Alignment:=wdAlignParagraphLeft;

wrdSelection.Font.Bold:=true;
wrdSelection.Font.Size:=13;
wrdSelection.TypeText('二、主要工作职责:');
wrdSelection.font.bold:=false;
wrdSelection.Font.Size:=11;
wrdSelection.TypeText(chr(10)+'一些内容');

//插入一个5行一列的表格:工作关系:
wordApp.Selection.GoTo(wdGotoLine,wdGoToLast);
wrdSelection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

wordDoc.Tables.Add(wrdSelection.Range,1,1,2,0);
wordDoc.Tables.Item(1).Rows.Item(7).Range.Paragraphs.Alignment:=wdAlignParagraphLeft;

wrdSelection.Font.Bold:=true;
wrdSelection.Font.Size:=13;
wrdSelection.TypeText('三、工作关系:');
wrdSelection.font.bold:=false;
wrdSelection.Font.Size:=11;
wrdSelection.TypeText(chr(10)+'一些内容');

//插入一个5行一列的表格:工作权限:
wordApp.Selection.GoTo(wdGotoLine,wdGoToLast);
wrdSelection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

wordDoc.Tables.Add(wrdSelection.Range,1,1,2,0);
wordDoc.Tables.Item(1).Rows.Item(8).Range.Paragraphs.Alignment:=wdAlignParagraphLeft;

wrdSelection.Font.Bold:=true;
wrdSelection.Font.Size:=13;
wrdSelection.TypeText('四、工作权限:');
wrdSelection.font.bold:=false;
wrdSelection.Font.Size:=11;
wrdSelection.TypeText(chr(10)+'一些内容');

//插入一个5行一列的表格:任职资格与要求:
wordApp.Selection.GoTo(wdGotoLine,wdGoToLast);
wrdSelection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

wordDoc.Tables.Add(wrdSelection.Range,1,1,2,0);
wordDoc.Tables.Item(1).Rows.Item(9).Range.Paragraphs.Alignment:=wdAlignParagraphLeft;

wrdSelection.Font.Bold:=true;
wrdSelection.Font.Size:=13;
wrdSelection.TypeText('五、任职资格与要求::');
wrdSelection.font.bold:=false;
wrdSelection.Font.Size:=11;
wrdSelection.TypeText(chr(10)+'学历:'+'一些内容');
wrdSelection.TypeText(chr(10)+'工作经历:'+'一些内容');
wrdSelection.TypeText(chr(10)+'要求具备的胜任特质:'+'一些内容');

//插入编制人等内容
wordApp.Selection.GoTo(wdGotoLine,wdGoToLast);
wrdSelection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

//编制人编制日期
wrdSelection.Font.Bold:=true;
wrdSelection.TypeText('编制人:');
wrdSelection.Font.Bold:=false;
wrdSelection.TypeText('编制人'+' ');

wrdSelection.Font.Bold:=true;
wrdSelection.TypeText('编制日期:');
wrdSelection.Font.Bold:=false;
wrdSelection.TypeText('编制日期');

InsertLines(1);

//审核人审核日期
wrdSelection.Font.Bold:=true;
wrdSelection.TypeText('审核人:');
wrdSelection.Font.Bold:=false;
wrdSelection.TypeText('审核人'+' ');

wrdSelection.Font.Bold:=true;
wrdSelection.TypeText('审核日期:');
wrdSelection.Font.Bold:=false;
wrdSelection.TypeText('审核日期');

InsertLines(1);

//批准人批准日期
wrdSelection.Font.Bold:=true;
wrdSelection.TypeText('批准人:');
wrdSelection.Font.Bold:=false;
wrdSelection.TypeText('批准人'+' ');

wrdSelection.Font.Bold:=true;
wrdSelection.TypeText('批准日期:');
wrdSelection.Font.Bold:=false;
wrdSelection.TypeText('批准日期');

InsertLines(1);

//操作员操作日期
wrdSelection.Font.Bold:=true;
wrdSelection.TypeText('操作员:');
wrdSelection.Font.Bold:=false;
wrdSelection.TypeText('操作员'+' ');

wrdSelection.Font.Bold:=true;
wrdSelection.TypeText('操作日期:');
wrdSelection.Font.Bold:=false;
wrdSelection.TypeText('操作日期');

//保存文档

end;

end.
 
在DOCUMENT对象中不有个BOOKMARK么,就这样。

至于格式,既然定义了书签,格式不也可以和书签一起事先在文本中定义好,何必要编程控制!
 
当然也可以做好word文档,当成一个模板,里面在需要的地方放在标签,编程时把实际的内容(可能是从数据库中查询出)替换掉模板文件的标签即可,两种方法,第一种纯用delphi生成word,不需要一个定制好的模板文件,第二种可以定制模板文件,客户也可以定制,只要按要求放置标签就行,呵呵
 
WordDocument.Bookmarks.Item('书签名'{这里不能直接用书签名,要用个OLEVARIANT变量,把书签名赋给它,在这里使用这个变量,我的只是示意}).Range.Text:='值';
WordDocument.Bookmarks.Item('书签名').Range.Font.(...):= '字体设置';

域就是FIELD对象,操作都是大同小异
 
多谢几位富翁对我的启发, 问题已解决了,送分!
 
后退
顶部