//////////////////////////////////////////////////////////////////////////////// //函数名 : DBToExcel // // 功能 : 将TDBGrid 的数据导入到从某模板文件建立的 Excel 文档中, // 举例 : DBToExcel( 'C:\ReportTable.Xlt', 'C:\ReportTable.Xls', // DBGrid1, 5, 1 ) ; // // 注意 :所指定的模板文件*.xlt, 必须已存在 //////////////////////////////////////////////////////////////////////////////// Procedure Tfrm_bbsc.DBToExcel ( ModuleName : String ; // Excel 模块文件名 *.Xlt FileName: String ; // Excel 目标文件名 *.Xls DBGrid : TDBGrid ; // TDBGrid 控件名 dataRow : Integer ; //数据起始行 dataCol : Integer; // 数据起始列 startcol:string; //表格起始列 endcol:string //表格结束列 ); var i,j:integer; s,bbtitle1,bbtitle2:string; var ExcelApp,MyWorkbook:oleVariant; begin //得到报表标题字 try dbgrid.DataSource.DataSet.DisableControls; if (inttostr(datarow)='') or (inttostr(datacol)='') or (startcol='') or (endcol='') then begin application.MessageBox(pchar('excel模版数据有错请在报表编码中维护!'),'系统提示:',0+64); exit; end; if rd_yb.Checked then begin bbtitle1:=gettitlte(trim(copy(filename,1,4)),trim(copy(filename,5,2)),copy(filename,7,length(filename)-6)); if trim(ado_scdata['shr'])='' then bbtitle2:='制表:'+trim(frm_main.StatusBar1.Panels[1].Text)+' 审核:'+'未审核'+' 制表日期:'+formatdatetime('yyyy"年"mm"月"dd"日"', date) else bbtitle2:='制表:'+trim(frm_main.StatusBar1.Panels[1].Text)+' 审核:'+trim(ado_scdata['shr'])+' 制表日期:'+formatdatetime('yyyy"年"mm"月"dd"日"', date); end; if rd_nb.Checked then begin bbtitle1:=gettitlte(trim(copy(filename,1,4)),'',copy(filename,5,length(filename)-4)); if trim(ado_scdata['shr'])='' then bbtitle2:='制表: '+trim(frm_main.StatusBar1.Panels[1].Text)+' 审核:'+'未审核'+' 制表日期:'+formatdatetime('yyyy"年"mm"月"dd"日"', date) else bbtitle2:='制表: '+trim(frm_main.StatusBar1.Panels[1].Text)+' 审核:'+trim(ado_scdata['shr'])+' 制表日期:'+formatdatetime('yyyy"年"mm"月"dd"日"', date); end; try ExcelApp:=CreateOleObject('Excel.Application'); MyWorkBook:=CreateOleobject('Excel.Sheet'); except on Exception do raise exception.Create('无法运行EXCEL!请确认已安装!') end; ModuleName := Trim(extractfilepath(application.ExeName)+'excel模版\'+ModuleName+'.xlt'); If FileExists(ModuleName)= False Then begin ShowMessage( '模板文件: '+ ModuleName + ' 不存在 !' ) ; Exit ; end ; //增加一个工作表 MyworkBook:=ExcelApp.WorkBooks.add(trim(ModuleName)); //字体颜色 {Myworkbook.worksheets[1].Range['A1:k1'].Font.Color := clBlue; //字体 Myworkbook.worksheets[1].Range['A1:H3'].Font.Name := '隶书'; //字号 Myworkbook.worksheets[1].Range['A1:H1'].Font.Size := 22; Myworkbook.worksheets[1].Range['A2:H2'].Font.Size :=18; Myworkbook.worksheets[1].Range['A3:H3'].Font.Size :=14; } MyWorkBook.WorkSheets[1].Cells[1,1].value:=bbtitle1; MyWorkBook.WorkSheets[1].Cells[2,1].value:=bbtitle2; // 把 TDBGrid 的数据导入Excel 中 DBGrid.DataSource.DataSet.First ; i := dataRow ; While Not(DBGrid.DataSource.DataSet.Eof) Do Begin For j:=datacol To DBGrid.FieldCount-datacol Do begin if DBGrid.Fields[j].DataType<>ftString then begin if (DBGrid.Fields[j].Value=0) or (DBGrid.Fields[j].Value=null) then MyWorkBook.WorkSheets[1].Cells[i,j].Value :='' else MyWorkBook.WorkSheets[1].Cells[i,j].Value :=trim(DBGrid.Fields[j].AsString); end else MyWorkBook.WorkSheets[1].Cells.Item[i,j]:=trim(DBGrid.Fields[j].AsString); end; DBGrid.DataSource.DataSet.Next ; i := i+1 ; End; //设置列宽 s:='A1:F'+inttostr(dbgrid.DataSource.DataSet.RecordCount); Myworkbook.worksheets[1].Range[s].Font.Name := '仿宋'; //划表线 s := trim(startcol)+inttostr(datarow)+':'+trim(endcol)+IntToStr(dbgrid.DataSource.DataSet.RecordCount+datarow-1); Myworkbook.worksheets[1].Range[s].Borders.LineStyle := 1; //设置页面 //MyworkBook.WorkSheets[1].PageSetup.CenterFooter := '第&P页'; MyworkBook.WorkSheets[1].PageSetup.CenterHorizontally := 2/0.035;//true; MyworkBook.WorkSheets[1].PageSetup.PaperSize := $9; // 保存到指定的文件 FileName := Trim(extractfilepath(application.ExeName)+'excel生成报表\'+FileName+'.xls'); IF FileExists(FileName) Then DeleteFile(FileName) ; MyworkBook.SaveAs(FileName); ExcelApp.WorkBooks.open(Filename); ExcelApp.Visible := true; finally dbgrid.DataSource.DataSet.EnableControls; end; end;
打开word: var wrd=new ActiveXObject("Word.Application") 加载模板: wrd.Documents.Open("D:\\QianZY\\Document\\外贸\\单证模版\\汇票.dot") 得到书签: var bm=wrd.ActiveDocument.Books 在特定书签处填入数据: bm.Item("openingdate").Range.Text="<%=strTemp%>" 得到表格: var ContractTable=wrd.ActiveDocument.tables(1) 在表格中填入数据: ContractTable.Rows(1).Cells.Item(9).Range.InsertAfter("总体积 TOTAL MEANS (CBM)") 在表格中插入一行: var newRow = ContractTable.Rows.Add(ContractTable.Rows(2)) 在行中填入数据: newRow.Cells.Item(1).Range.InsertAfter("<%=arrDetail[i][0]%>") 得到行数: ContractTable.Rows.Count
碰上大好人了!
再次感谢!
//函数名 : DBToExcel
//
// 功能 : 将TDBGrid 的数据导入到从某模板文件建立的 Excel 文档中,
// 举例 : DBToExcel( 'C:\ReportTable.Xlt', 'C:\ReportTable.Xls',
// DBGrid1, 5, 1 ) ; //
// 注意 :所指定的模板文件*.xlt, 必须已存在
////////////////////////////////////////////////////////////////////////////////
Procedure Tfrm_bbsc.DBToExcel
( ModuleName : String ; // Excel 模块文件名 *.Xlt
FileName: String ; // Excel 目标文件名 *.Xls
DBGrid : TDBGrid ; // TDBGrid 控件名
dataRow : Integer ; //数据起始行
dataCol : Integer; // 数据起始列
startcol:string; //表格起始列
endcol:string //表格结束列
);
var
i,j:integer;
s,bbtitle1,bbtitle2:string;
var ExcelApp,MyWorkbook:oleVariant;
begin
//得到报表标题字
try
dbgrid.DataSource.DataSet.DisableControls;
if (inttostr(datarow)='') or (inttostr(datacol)='') or (startcol='') or (endcol='') then
begin
application.MessageBox(pchar('excel模版数据有错请在报表编码中维护!'),'系统提示:',0+64);
exit;
end;
if rd_yb.Checked then
begin
bbtitle1:=gettitlte(trim(copy(filename,1,4)),trim(copy(filename,5,2)),copy(filename,7,length(filename)-6));
if trim(ado_scdata['shr'])='' then bbtitle2:='制表:'+trim(frm_main.StatusBar1.Panels[1].Text)+' 审核:'+'未审核'+' 制表日期:'+formatdatetime('yyyy"年"mm"月"dd"日"', date)
else
bbtitle2:='制表:'+trim(frm_main.StatusBar1.Panels[1].Text)+' 审核:'+trim(ado_scdata['shr'])+' 制表日期:'+formatdatetime('yyyy"年"mm"月"dd"日"', date);
end;
if rd_nb.Checked then
begin
bbtitle1:=gettitlte(trim(copy(filename,1,4)),'',copy(filename,5,length(filename)-4));
if trim(ado_scdata['shr'])='' then bbtitle2:='制表: '+trim(frm_main.StatusBar1.Panels[1].Text)+' 审核:'+'未审核'+' 制表日期:'+formatdatetime('yyyy"年"mm"月"dd"日"', date)
else
bbtitle2:='制表: '+trim(frm_main.StatusBar1.Panels[1].Text)+' 审核:'+trim(ado_scdata['shr'])+' 制表日期:'+formatdatetime('yyyy"年"mm"月"dd"日"', date);
end;
try
ExcelApp:=CreateOleObject('Excel.Application');
MyWorkBook:=CreateOleobject('Excel.Sheet');
except
on Exception do raise exception.Create('无法运行EXCEL!请确认已安装!')
end;
ModuleName := Trim(extractfilepath(application.ExeName)+'excel模版\'+ModuleName+'.xlt');
If FileExists(ModuleName)= False Then
begin
ShowMessage( '模板文件: '+ ModuleName + ' 不存在 !' ) ;
Exit ;
end ;
//增加一个工作表
MyworkBook:=ExcelApp.WorkBooks.add(trim(ModuleName));
//字体颜色
{Myworkbook.worksheets[1].Range['A1:k1'].Font.Color := clBlue;
//字体
Myworkbook.worksheets[1].Range['A1:H3'].Font.Name := '隶书';
//字号
Myworkbook.worksheets[1].Range['A1:H1'].Font.Size := 22;
Myworkbook.worksheets[1].Range['A2:H2'].Font.Size :=18;
Myworkbook.worksheets[1].Range['A3:H3'].Font.Size :=14; }
MyWorkBook.WorkSheets[1].Cells[1,1].value:=bbtitle1;
MyWorkBook.WorkSheets[1].Cells[2,1].value:=bbtitle2;
// 把 TDBGrid 的数据导入Excel 中
DBGrid.DataSource.DataSet.First ;
i := dataRow ;
While Not(DBGrid.DataSource.DataSet.Eof) Do
Begin
For j:=datacol To DBGrid.FieldCount-datacol Do
begin
if DBGrid.Fields[j].DataType<>ftString then
begin
if (DBGrid.Fields[j].Value=0) or (DBGrid.Fields[j].Value=null) then
MyWorkBook.WorkSheets[1].Cells[i,j].Value :=''
else
MyWorkBook.WorkSheets[1].Cells[i,j].Value :=trim(DBGrid.Fields[j].AsString);
end
else
MyWorkBook.WorkSheets[1].Cells.Item[i,j]:=trim(DBGrid.Fields[j].AsString);
end;
DBGrid.DataSource.DataSet.Next ;
i := i+1 ;
End;
//设置列宽
s:='A1:F'+inttostr(dbgrid.DataSource.DataSet.RecordCount);
Myworkbook.worksheets[1].Range[s].Font.Name := '仿宋';
//划表线
s := trim(startcol)+inttostr(datarow)+':'+trim(endcol)+IntToStr(dbgrid.DataSource.DataSet.RecordCount+datarow-1);
Myworkbook.worksheets[1].Range[s].Borders.LineStyle := 1;
//设置页面
//MyworkBook.WorkSheets[1].PageSetup.CenterFooter := '第&P页';
MyworkBook.WorkSheets[1].PageSetup.CenterHorizontally := 2/0.035;//true;
MyworkBook.WorkSheets[1].PageSetup.PaperSize := $9;
// 保存到指定的文件
FileName := Trim(extractfilepath(application.ExeName)+'excel生成报表\'+FileName+'.xls');
IF FileExists(FileName) Then DeleteFile(FileName) ;
MyworkBook.SaveAs(FileName);
ExcelApp.WorkBooks.open(Filename);
ExcelApp.Visible := true;
finally
dbgrid.DataSource.DataSet.EnableControls;
end;
end;
var wrd=new ActiveXObject("Word.Application")
加载模板:
wrd.Documents.Open("D:\\QianZY\\Document\\外贸\\单证模版\\汇票.dot")
得到书签:
var bm=wrd.ActiveDocument.Books
在特定书签处填入数据:
bm.Item("openingdate").Range.Text="<%=strTemp%>"
得到表格:
var ContractTable=wrd.ActiveDocument.tables(1)
在表格中填入数据:
ContractTable.Rows(1).Cells.Item(9).Range.InsertAfter("总体积 TOTAL MEANS (CBM)")
在表格中插入一行:
var newRow = ContractTable.Rows.Add(ContractTable.Rows(2))
在行中填入数据:
newRow.Cells.Item(1).Range.InsertAfter("<%=arrDetail[i][0]%>")
得到行数:
ContractTable.Rows.Count