我近段时间一直在做各种各样的报表,特别是那些复杂报表,如下图所示:
像这类报表若说用第三方控件,说实在,你还得重做一次表,你做的又不一定符合人家原来做的要求,若用用友软件,那得交一笔不小的数目的钱哦!可我们公司一直要求以最小的投入获取最大的回报,所以是不可能的,后面想想,他们是用EXCEL做成的表给我的,我为什么不可以直接调用它们的表呢,我只要把这些表做成模板再与数据库相连,便可实现了,后来就按这方案去进行了,结果当然是搞定了,现在公布出来与大家共享,当然,对与高手而言也许不是怎么高的水平,但我相信会对部分人有用的,像这类报表做的思想就是:!一.定义各类数据的行列;二,连接模板;三,按要求进行相关的数据提取和相关的运算,对于数据运算一定要尽量想到EXCE的强大的运算功能,只要它能帮解决的就不要程序里面编写,否则运行起来就不是那么快了,相关代码如下:
procedure Tdp_bb.dp_okClick(Sender: TObject);
var
cbw,zbw,wbw,rjw,ph,ExeRootPath:string;
i,j,k:integer;
t1,t2:Ttime;
begin
rjw:=trim(datetostr(dp_dtp.Date));
cbw := trim(dp_cbbc.Text);
zbw := trim(dp_cbbz.Text);
wbw := trim(dp_cbbw.Text);
t1:=0;
t2:=0;
if (cbw<>'') and (zbw<>'') and (wbw<>'') then
begin
try
ChDir(ExtractFilePath(Application.ExeName));
ChDir('..');
ExeRootPath := GetCurrentDir;
dp_exapt.Connect;
dp_exapt.Visible[0]:=false;
dp_exapt.Workbooks.Add(ExeRootPath+'/config/sjcs.xls',0);
dp_exwb.ConnectTo(dp_exapt.Workbooks[1]);
dp_exws.ConnectTo(dp_exwb.Sheets[1] as _worksheet);
j:=6;//起始行初始化
with dp_form.dp_adoq1 do
begin
close;
sql.Clear;
sql.Add('select GWDY_SJPH,GWDY_ZTP from TB_GWDY order by GWDY_XH asc');
open;
while not eof do
begin
ph:=fieldbyname('GWDY_SJPH').AsString;
i:=fieldbyname('GWDY_ZTP').AsInteger;
if i=6 then
{时间类型}