您的位置:首页 > 编程语言 > Delphi

DELPHI制作复杂报表实例,特别推荐!

2007-11-15 11:01 489 查看
我近段时间一直在做各种各样的报表,特别是那些复杂报表,如下图所示:



像这类报表若说用第三方控件,说实在,你还得重做一次表,你做的又不一定符合人家原来做的要求,若用用友软件,那得交一笔不小的数目的钱哦!可我们公司一直要求以最小的投入获取最大的回报,所以是不可能的,后面想想,他们是用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
{时间类型}
begin
{早班数据位置}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select YS_YPTM from TB_YS where YS_SJPH='''+ph+''' and YS_BB='''+cbw+''' and YS_DATE='''+rjw+''' order by YS_XH asc');
open;
for k:=6 to RecordCount+5 do
begin
dp_exws.Cells.Item[j,k]:=trim(fieldbyname('YS_YPTM').AsString);
next;
end;
end;
{中班数据位置}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select YS_YPTM from TB_YS where YS_SJPH='''+ph+''' and YS_BB='''+zbw+''' and YS_DATE='''+rjw+''' order by YS_XH asc');
open;
for k:=11 to RecordCount+10 do
begin
dp_exws.Cells.Item[j,k]:=trim(fieldbyname('YS_YPTM').AsString);
next;
end;
end;
{晚班数据位置}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select YS_YPTM from TB_YS where YS_SJPH='''+ph+''' and YS_BB='''+wbw+''' and YS_DATE='''+rjw+''' order by YS_XH asc');
open;
for k:=16 to RecordCount+15 do
begin
dp_exws.Cells.Item[j,k]:=trim(fieldbyname('YS_YPTM').AsString);
next;
end;
end;
{月平均}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select YS_YPTM from TB_YS where YS_SJPH='''+ph+''' and month(YS_DATE)='''+formatdatetime('mm',dp_dtp.Date)+''' order by YS_XH asc');
open;
while not eof do
begin
t1:=t1+strtotime(trim(fieldbyname('YS_YPTM').AsString));
next;
end;
dp_exws.Cells.Item[j,22]:=timetostr(t1);
t1:=0;
end;
{榨季平均}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select YS_YPTM from TB_YS where YS_SJPH='''+ph+''' order by YS_XH asc');
open;
while not eof do
begin
t2:=t2+strtotime(trim(fieldbyname('YS_YPTM').AsString));
next;
end;
dp_exws.Cells.Item[j,23]:=timetostr(t2);
t2:=0;
end;
end
else
{非时间类型}
begin
{早班数据位置}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select YS_YPS from TB_YS where YS_SJPH='''+ph+''' and YS_BB='''+cbw+''' and YS_DATE='''+rjw+''' and YS_YPTM in(''2:30'',''4:30'',''6:30'',''8:30'','''') order by YS_XH asc');
open;
for k:=6 to RecordCount+5 do
begin
dp_exws.Cells.Item[j,k]:=trim(fieldbyname('YS_YPS').AsString);
next;
end;
end;
{中班数据位置}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select YS_YPS from TB_YS where YS_SJPH='''+ph+''' and YS_BB='''+zbw+''' and YS_DATE='''+rjw+''' and YS_YPTM in(''10:30'',''12:30'',''14:30'',''16:30'','''') order by YS_XH asc');
open;
for k:=11 to RecordCount+10 do
begin
dp_exws.Cells.Item[j,k]:=trim(fieldbyname('YS_YPS').AsString);
next;
end;
end;
{晚班数据位置}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select YS_YPS from TB_YS where YS_SJPH='''+ph+''' and YS_BB='''+wbw+''' and YS_DATE='''+rjw+''' and YS_YPTM in(''18:30'',''20:30'',''22:30'',''00:30'','''') order by YS_XH asc');
open;
for k:=16 to RecordCount+15 do
begin
dp_exws.Cells.Item[j,k]:=trim(fieldbyname('YS_YPS').AsString);
next;
end;
end;
{月平均}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select avg(YS_YPS) as A from TB_YS where YS_SJPH='''+ph+''' and month(YS_DATE)='''+formatdatetime('mm',dp_dtp.Date)+''' group by YS_SJPH');
open;
if not eof then
begin
dp_exws.Cells.Item[j,22]:=trim(fieldbyname('A').AsString);
end;
end;
{榨季平均}
with dp_form.dp_adoq2 do
begin
close;
sql.Clear;
sql.Add('select avg(YS_YPS) as B from TB_YS where YS_SJPH='''+ph+''' group by YS_SJPH');
open;
if not eof then
begin
dp_exws.Cells.Item[j,23]:=trim(fieldbyname('B').AsString);
end;
end;
end;
j:=j+1;
next;
end;
end;
dp_exws.Cells.Item[2,1] := rjw;
dp_exws.Cells.Item[4,6] := cbw;
dp_exws.Cells.Item[4,11]:= zbw;
dp_exws.Cells.Item[4,16]:= wbw;
bb_tm.Enabled:=true;
except
showmessage('模板路径出错或者是您还没有安装OFFICE办公软件');
close;
end;
end;
end;

以上希望对学DELPHI的人有帮助!只要我拥有的知识一定与大家共享!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: