关于数据导入到word文档的问题,请兄弟们帮忙!(46分)

A

alisha

Unregistered / Unconfirmed
GUEST, unregistred user!
兄弟们,我想把dbgrid中的数据导入到word文档中,在网上找了老半天,也没有合适的方法,请有经验的兄弟,帮帮忙介绍一些好方法!
 
C

cdj000

Unregistered / Unconfirmed
GUEST, unregistred user!
找找以前的富翁资料吧,有不少的,呵呵
比如下面的就是
unit MyOffice2000;

interface

uses
DBGrids, ComObj, word2000, DB;

function DBGrid2Word(DBGrid:TDBGrid;Title:String):Boolean;

implementation

function DBGrid2Word(DBGrid:TDBGrid;Title:String):Boolean;
var
MSWord2000: OLEVariant;
ColCount,RowCount,I:Integer;
ColumnTitle,CellStr:String;
begin
Result:=False;
//打开Word2000;
try
MSWord2000 := GetActiveOleObject('Word.Application');
except
try
MSWord2000 := CreateOleObject('Word.Application');
except
Exit;
end;
end;
MSWord2000.Visible := True;
//创建空文档;
MSWord2000.Documents.Add();
//写入标题;
MSWord2000.Selection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;
MSWord2000.Selection.Font.Size:=22;
MSWord2000.Selection.Font.Bold:=wdToggle;
MSWord2000.Selection.TypeText(Text:=Title);
//MSWord2000.Selection.MoveRight(Unit:=1, Count:=1);
MSWord2000.Selection.TypeParagraph;
MSWord2000.Selection.ParagraphFormat.Alignment:= wdAlignParagraphJustify;
MSWord2000.Selection.Font.Size:=11;
MSWord2000.Selection.Font.Bold:=wdToggle;
MSWord2000.Selection.TypeParagraph;
with DBGrid.DataSource.DataSet do
begin
ColCount:=FieldCount;
RowCount:=RecordCount;
//画出空表格;
MSWord2000.ActiveDocument.Tables.Add(Range:=MSWord2000.Selection.Range,
NumRows:=RowCount+1,
NumColumns:=ColCount,
DefaultTableBehavior:=0,
AutoFitBehavior:=0);
//写入表格的表头
for I:=0 to ColCount-1 do
begin
MSWord2000.Selection.Font.Bold:= wdToggle;
MSWord2000.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
ColumnTitle:=DBGrid.Columns.Title.Caption;
//Fields.FieldName;
MSWord2000.Selection.TypeText(Text:=ColumnTitle);
if I<ColCount-1 then
MSWord2000.Selection.MoveRight(Unit:=wdCell);
end;
First;
//写入表格中的数据;
while not EOF do
begin
MSWord2000.Selection.MoveDown(Unit:=wdLine,Count:=1);
MSWord2000.Selection.MoveLeft(Unit:=wdCell,Count:=ColCount-1);
for I:=0 to ColCount-1 do
begin
CellStr:=Fields.AsString;
MSWord2000.Selection.TypeText(Text:=CellStr);
if I<ColCount-1 then
MSWord2000.Selection.MoveRight(Unit:=wdCell);
end;
Next;
end;
MSWord2000.Selection.MoveRight(Unit:=wdCharacter, Count:=1);
MSWord2000.Selection.InsertRows( 1);
MSWord2000.Selection.Collapse (Direction:=wdCollapseStart);
MSWord2000.Selection.TypeText (Text:='合计');
for I:=1 to ColCount-1 do
begin
MSWord2000.Selection.MoveRight(Unit:=wdCell, Count:=1);
if Fields.DataType in [ftSmallint,ftInteger,ftWord,ftFloat,ftCurrency] then
begin
MSWord2000.Selection.InsertFormula (Formula:='=SUM(ABOVE)', NumberFormat:='');
end;
end;
end;
Result:=True;
end;

end.
 
A

alisha

Unregistered / Unconfirmed
GUEST, unregistred user!
我是想通过现有的模板,规范自己导出的文档,不知有好的方法没有!
而且cdj000兄,你这个例子是不是系统装的必须是office2000?
 

来如风

Unregistered / Unconfirmed
GUEST, unregistred user!
WordHandle := CreateOleObject('Word.Application');
WordHandle.Visible := false;

DocHandle := WordHandle.Documents.Add(Template:=dotname,NewTemplate:=False);
//dotname为事先建好的文档模板名称,可以写绝对路径名
BookMarkName := 'Head'; //这个是我写死的右上角的时间标签
//wdGoToBookmark = -1
DocHandle.Application.Selection.goto(What:=-1,Name:=BookMarkName);
DocHandle.Application.Selection.Text:= values; //这个head标签的值
......
DocHandle.SaveAs(FileName:=docName, FileFormat:=0, AddToRecentFiles:=False);

DocHandle.close;
WordHandle.quit;

这个就是模板中根据书签名输入值的方法
自己扩展使用吧
 
A

alisha

Unregistered / Unconfirmed
GUEST, unregistred user!
to 来如风:书签名是在word模板中定义的吗?

而且模板中的列我是不是可以随时自己在程序中增加?
 

来如风

Unregistered / Unconfirmed
GUEST, unregistred user!
是的啊,这种方式适合生成规范性的word文档,

简单点比如一个请贴,格式差不多都固定的,
开头名字那里插入个书签,书签名称叫 “姓名”
那么软件里操作的时候查找这个 姓名 书签,然后把值写上。。

就是这么简单
 
A

alisha

Unregistered / Unconfirmed
GUEST, unregistred user!
to 来如风兄:What:=-1是指什么,我怎么提示找不到域啊?

另外,怎么在模板的表中增加列啊?
 

Similar threads

S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部