我想用EXCEL设置模板,然后根据模板导出数据形成报表。分不够再加,只要问题解决!!!!

htzq 2003-11-10 07:35:31
做一般的报表,先根据客户的要求做成EXCEL模板,固定好行距、边距、行数等,用批注标识字段,好象很难的!
...全文
147 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
usa112233 2004-02-03
  • 打赏
  • 举报
回复
ExcelApp.WorkBooks.add('模版文件名',0)就可以打开了。‘模版文件名'要绝对路径
太空11 2003-11-11
  • 打赏
  • 举报
回复
打开word:
var wrd=new ActiveXObject("Word.Application")
加载模板:
wrd.Documents.Open("D:\\QianZY\\Document\\外贸\\单证模版\\汇票.dot")
得到书签:
var bm=wrd.ActiveDocument.Bookmarks
在特定书签处填入数据:
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
coolfilm 2003-11-11
  • 打赏
  • 举报
回复
////////////////////////////////////////////////////////////////////////////////
//函数名 : 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;
htzq 2003-11-11
  • 打赏
  • 举报
回复
up
popmailzjw 2003-11-11
  • 打赏
  • 举报
回复
我也做了一个,不过是一个个写进去的
saien 2003-11-10
  • 打赏
  • 举报
回复
htzq 2003-11-10
  • 打赏
  • 举报
回复
楼上的能详细点吗?谢了!我很急!
gross1215 2003-11-10
  • 打赏
  • 举报
回复
不难,我以前实现过!!你先在excel中建好一个宏,把宏代码拷到delphi中修改一点点就可以了!
htzq 2003-11-10
  • 打赏
  • 举报
回复
TO:blackbeetle(票房毒药)
碰上大好人了!我的邮箱:jjfzjg@163.com
再次感谢!
blackbeetle 2003-11-10
  • 打赏
  • 举报
回复
不难,我以前实现过,呵呵,如果你用标注的话,记得要把标注给删了,否则excel一片红,而且文件比较大。我可以发给你例子,不知道你qq或者msn是多少啊?
aiirii 2003-11-10
  • 打赏
  • 举报
回复
用Ado 聯接, 然後就是操作數據庫的問題了!!
sixgj 2003-11-10
  • 打赏
  • 举报
回复
呵呵,模板就放在程序目录下,然后设置为只读,他一保存要他起个别的名字存了就是了。

5,392

社区成员

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

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