dbgrid输出到word! 有word模板,现在要把内容(文字和dbgrid数据)输出到word模板,并生成word文档,模板内有要替换的书签,并将dbgrid列表输出,请问谁可以提供范例! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 转自:http://www.tianyablog.com/blogger/post_show.asp?blogid=235226&postid=3242812下面是源代码。其中我使用了RZ的控件,用DELPHI自带的DBGIRD也是可以的。function TBaseControl.DBGird2Word(DBGrid: TRzDBGrid): Boolean;var Count,I,J:Integer; Doc:OleVariant; CurrColumn,RecordNum:Integer; wTable: Variant;begin try Doc:=CreateOleObject('Word.Application'); Doc.Visible:=True; Doc.Documents.Add; except Result:=false; Exit; end; Count:=DBGrid.Columns.Count-1; CurrColumn:=0; for I:=0 to Count do begin if DBGrid.Columns.Items[I].Visible then begin Inc(CurrColumn); end; end; RecordNum:=DBGrid.DataSource.DataSet.RecordCount+1; wTable:=Doc.ActiveDocument.Tables.Add(Doc.ActiveDocument.Range(0, 0),RecordNum,CurrColumn); wTable.Columns.AutoFit; CurrColumn:=0; for I:=0 to Count do begin if DBGrid.Columns.Items[I].Visible then begin wTable.Cell(1,CurrColumn+1).Range.InsertAfter(DBGrid.Columns.Items[I].Title.Caption); Inc(CurrColumn); end; end; J:=1; DBGrid.DataSource.DataSet.First; while not DBGrid.DataSource.DataSet.Eof do begin Inc(J); CurrColumn:=0; for I:=0 to Count do begin if DBGrid.Columns.Items[I].Visible then begin wTable.Cell(J,CurrColumn+1).Range.InsertAfter(DBGrid.Columns[I].Field.DisplayText); Inc(CurrColumn); end; end; DBGrid.DataSource.DataSet.Next; end;end;如果有转贴,请您保留出处,谢谢您了!! 是http://blog.csdn.net/happyprogram/archive/2003/10/13/14693.aspx但编译不通过,少了很多东西 一个输出到模板表格中的例子,我在做项目的时侯用的,至于替换相关书签,我这边也有,比这个麻烦一点,需要另外的类型库。uses SysUtils,Windows,ADODB,DB,Word97,OleServer, Classes;var sSQL: String; qry: TADOQuery; fileN:OLEvariant; oleGrid: array[1..5] of olevariant; oWordApp: TWordApplication; oWordDoc: TWordDocument; sResult: String; i: Integer;begin qry:= nil; try sResult:=''; with qry do begin qry:= TADOQuery.Create(nil); qry.LockType:= ltReadOnly; //转换日期范围 //加载合同项目数据 sSQL:= 'select ProjectName, ProjectCode from FPPro_Project where ProjectID='+ IntToStr(iProjectID); db_uPublic_GetRecordset(gConn, sSQL, qry); if RecordCount= 0 then begin //如果没有记录,退出 qry.Free; Result:= '没有找到项目记录!'; Exit; end; //连接Word oWordApp:= TWordApplication.Create(nil); owordDoc:= TWordDocument.Create(nil); try oWordApp.Connect; except qry.Free; owordDoc.Free; oWordApp.Free; Result:= '你可能没有安装Word!'; Exit; end; fileN:= fucGetExePath+ 'Template\基础资料清单.dot'; if not FileExists(fileN) then begin Result:= '没有找到模板文件!'; Exit; end; oWordApp.Documents.Add(fileN,emptyparam); oWordDoc.ConnectTo(oWordApp.ActiveDocument as _document); oWordApp.Options.CheckSpellingAsYouType:= False; //关闭拼写检查 oWordApp.Options.CheckGrammarAsYouType:= False; //关闭语法检查 oleGrid[1]:= oWordDoc.Tables.Item(1); oleGrid[1].Cell(1,2).Range.Text:= FieldByName('ProjectName').AsString; oleGrid[1].Cell(1,4).Range.Text:= FieldByName('ProjectCode').AsString; sSQL:= 'select FileName, CreateLogon, CreateDate from (FPPro_AddonFile ' + 'left join FPPro_RFile on FPPro_AddonFile.FileID=FPPro_RFile.FileID) ' + 'where FPPro_AddonFile.FileType=2 and FPPro_RFile.RelationKind=1 ' + 'and FPPro_RFile.RID='+ IntToStr(iProjectID); db_uPublic_GetRecordset(gConn, sSQL, qry); oleGrid[1].Cell(6,1).Range.Text:= '共计份数: '+ IntToStr(RecordCount)+ '份 '; if RecordCount>0 then begin //添加统计项目 First; i:=4; while not Eof do begin oleGrid[1].Cell(i,1).Range.Select; oWordApp.Selection.Rows.Add(emptyparam); //插入空行 oleGrid[1].Cell(i,1).Range.Text:= FieldByName('FileName').AsString; oleGrid[1].Cell(i,2).Range.Text:= FieldByName('CreateLogon').AsString; oleGrid[1].Cell(i,3).Range.Text:= FieldByName('CreateDate').AsString; i:=i+1; Next; end; end; oWordApp.Visible:= True; oWordApp.WindowState:= 1; oWordApp.Activate; end; qry.Free; oWordApp.Free; owordDoc.Free; Result:= sResult; except on e: Exception do begin qry.Free; if owordDoc<> nil then owordDoc.Free; if oWordApp<> nil then oWordApp.Free; Result:= e.Message; end; end;end; 我运行//连接Word oWordApp:= TWordApplication.Create(nil); owordDoc:= TWordDocument.Create(nil); try oWordApp.Connect; except qry.Free; owordDoc.Free; oWordApp.Free; Result:= '你可能没有安装Word!'; Exit;后总是出'你可能没有安装Word!';,主要是在 oWordApp.Connect;过不去! var myExcelApplication : TExcelApplication; myExcelWorkBook : TExcelWorkBook; myExcelWorkSheet : TExcelWorkSheet;begin myExcelApplication.Connect(); myExcelApplication.Visible[0] := true; myExcelWorkBook.ConnectTo(myExcelApplication.Workbooks.Open(strFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)); myExcelWorkBook.OnSheetBeforeDoubleClick := ExcelWorkbook1SheetBeforeDoubleClick; myExcelWorkBook.OnSheetBeforeRightClick := ExcelWorkbook1SheetBeforeRightClick; myExcelWorkSheet := myExcelWorkBook.ActiveSheet as _WorkSheet; ....end; 为什么imageList不生效? 关于数组的问题:如何实现像sql中的distinct那样的功能... 有关dll的一个小问题,,,, 请问这条SQL语句怎么写啊 谢谢了 成功的话立即给分50 只给一个 才买的电脑,启动很慢,重装过也没用,昨天拆了,但找不出原因,不知何故?请懂行的指点一二!谢谢!!! 如何在程序中实现代码提示功能 发现Delph开发人员指南一错误第二十章,写反了 有关Intraweb的问题 Delphi5 如何连接Orcle? 150分,请教有难度的3个问题,真的有一点难度,低手就算乐。 恭喜95有了小95 delphi怎样制作QQ或者瑞星一样的界面?
下面是源代码。其中我使用了RZ的控件,用DELPHI自带的DBGIRD也是可以的。
function TBaseControl.DBGird2Word(DBGrid: TRzDBGrid): Boolean;
var
Count,I,J:Integer;
Doc:OleVariant;
CurrColumn,RecordNum:Integer;
wTable: Variant;
begin
try
Doc:=CreateOleObject('Word.Application');
Doc.Visible:=True;
Doc.Documents.Add;
except
Result:=false;
Exit;
end;
Count:=DBGrid.Columns.Count-1;
CurrColumn:=0;
for I:=0 to Count do
begin
if DBGrid.Columns.Items[I].Visible then
begin
Inc(CurrColumn);
end;
end;
RecordNum:=DBGrid.DataSource.DataSet.RecordCount+1;
wTable:=Doc.ActiveDocument.Tables.Add(Doc.ActiveDocument.Range(0, 0),RecordNum,CurrColumn);
wTable.Columns.AutoFit;
CurrColumn:=0;
for I:=0 to Count do
begin
if DBGrid.Columns.Items[I].Visible then
begin
wTable.Cell(1,CurrColumn+1).Range.InsertAfter(DBGrid.Columns.Items[I].Title.Caption);
Inc(CurrColumn);
end;
end;
J:=1;
DBGrid.DataSource.DataSet.First;
while not DBGrid.DataSource.DataSet.Eof do
begin
Inc(J);
CurrColumn:=0;
for I:=0 to Count do
begin
if DBGrid.Columns.Items[I].Visible then
begin
wTable.Cell(J,CurrColumn+1).Range.InsertAfter(DBGrid.Columns[I].Field.DisplayText);
Inc(CurrColumn);
end;
end;
DBGrid.DataSource.DataSet.Next;
end;
end;
如果有转贴,请您保留出处,谢谢您了!!
http://blog.csdn.net/happyprogram/archive/2003/10/13/14693.aspx
但编译不通过,少了很多东西
uses SysUtils,Windows,ADODB,DB,Word97,OleServer, Classes;
var
sSQL: String;
qry: TADOQuery;
fileN:OLEvariant;
oleGrid: array[1..5] of olevariant;
oWordApp: TWordApplication;
oWordDoc: TWordDocument;
sResult: String;
i: Integer;
begin
qry:= nil;
try
sResult:='';
with qry do
begin
qry:= TADOQuery.Create(nil);
qry.LockType:= ltReadOnly;
//转换日期范围
//加载合同项目数据
sSQL:= 'select ProjectName, ProjectCode from FPPro_Project where ProjectID='+ IntToStr(iProjectID);
db_uPublic_GetRecordset(gConn, sSQL, qry);
if RecordCount= 0 then
begin //如果没有记录,退出
qry.Free;
Result:= '没有找到项目记录!';
Exit;
end; //连接Word
oWordApp:= TWordApplication.Create(nil);
owordDoc:= TWordDocument.Create(nil);
try
oWordApp.Connect;
except
qry.Free;
owordDoc.Free;
oWordApp.Free;
Result:= '你可能没有安装Word!';
Exit;
end;
fileN:= fucGetExePath+ 'Template\基础资料清单.dot';
if not FileExists(fileN) then
begin
Result:= '没有找到模板文件!';
Exit;
end;
oWordApp.Documents.Add(fileN,emptyparam);
oWordDoc.ConnectTo(oWordApp.ActiveDocument as _document);
oWordApp.Options.CheckSpellingAsYouType:= False; //关闭拼写检查
oWordApp.Options.CheckGrammarAsYouType:= False; //关闭语法检查
oleGrid[1]:= oWordDoc.Tables.Item(1);
oleGrid[1].Cell(1,2).Range.Text:= FieldByName('ProjectName').AsString;
oleGrid[1].Cell(1,4).Range.Text:= FieldByName('ProjectCode').AsString; sSQL:= 'select FileName, CreateLogon, CreateDate from (FPPro_AddonFile '
+ 'left join FPPro_RFile on FPPro_AddonFile.FileID=FPPro_RFile.FileID) '
+ 'where FPPro_AddonFile.FileType=2 and FPPro_RFile.RelationKind=1 '
+ 'and FPPro_RFile.RID='+ IntToStr(iProjectID);
db_uPublic_GetRecordset(gConn, sSQL, qry); oleGrid[1].Cell(6,1).Range.Text:= '共计份数: '+ IntToStr(RecordCount)+ '份 ';
if RecordCount>0 then
begin
//添加统计项目
First;
i:=4;
while not Eof do
begin
oleGrid[1].Cell(i,1).Range.Select;
oWordApp.Selection.Rows.Add(emptyparam); //插入空行
oleGrid[1].Cell(i,1).Range.Text:= FieldByName('FileName').AsString;
oleGrid[1].Cell(i,2).Range.Text:= FieldByName('CreateLogon').AsString;
oleGrid[1].Cell(i,3).Range.Text:= FieldByName('CreateDate').AsString; i:=i+1;
Next;
end;
end; oWordApp.Visible:= True;
oWordApp.WindowState:= 1;
oWordApp.Activate;
end;
qry.Free;
oWordApp.Free;
owordDoc.Free; Result:= sResult;
except
on e: Exception do
begin
qry.Free;
if owordDoc<> nil then owordDoc.Free;
if oWordApp<> nil then oWordApp.Free;
Result:= e.Message;
end;
end;
end;
//连接Word
oWordApp:= TWordApplication.Create(nil);
owordDoc:= TWordDocument.Create(nil);
try
oWordApp.Connect;
except
qry.Free;
owordDoc.Free;
oWordApp.Free;
Result:= '你可能没有安装Word!';
Exit;
后总是出'你可能没有安装Word!';,主要是在 oWordApp.Connect;过不去!
myExcelApplication : TExcelApplication;
myExcelWorkBook : TExcelWorkBook;
myExcelWorkSheet : TExcelWorkSheet;
begin
myExcelApplication.Connect();
myExcelApplication.Visible[0] := true;
myExcelWorkBook.ConnectTo(myExcelApplication.Workbooks.Open(strFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));
myExcelWorkBook.OnSheetBeforeDoubleClick := ExcelWorkbook1SheetBeforeDoubleClick;
myExcelWorkBook.OnSheetBeforeRightClick := ExcelWorkbook1SheetBeforeRightClick;
myExcelWorkSheet := myExcelWorkBook.ActiveSheet as _WorkSheet; ....
end;