没做过报表的东东,请大家指点(50分)

  • 主题发起人 主题发起人 lmax
  • 开始时间 开始时间
L

lmax

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI中实现象EXCEL那样的报表,用什么控件比较好。最好能有个简单的例子,因为我没做过类似的程序,向大家学习。
 
咋地,没人告诉呀,伤心
 
就用ADO+DBGIRDEH就可以了,DBGIRDEH中就有可以输出到EXCEL中的功能
 
FastReport ,rm這種都可以....如果輸出excel的話..建議自己寫程序..控件運行慢阿..
 
输出excel我会。就是表格方面没有使用过。dbgrid的功能太简单了,不能达到用户需求,
还有,这个论坛怎么不能贴图,否则我就贴个图片让大家看看。
-----------------------------------------------------------------
上标题一 上标题二
-----------------------------------------------------------------
左边第一列标题|左边第二列标题| 数据 | 数据
-----------------------------------------------------------------
左边第一列标题|左边第二列标题| 数据 | 数据
-----------------------------------------------------------------
左边第一列标题|左边第二列标题| 数据 | 数据
-----------------------------------------------------------------
类似于上边面的表格
 
zhouyou155已經說了啊

我用的是FASTREPORT
 
DBGIRDEH+fastreport
 
用ReportMachine也不错,容易上手。你要用的话,我可以给你几个demo.
我的qq; 16052097
 
我做的报表系统是使用的stringGrid,功能很多,使用也比较简单!
 
我只用Excel来打印,控制代码好写,而且用户可以自定义部分格式。
 
按你的格式来生成报表,先把查询结果写入listview1:
procedure TForm1.writetolv(listview:TListView;ado:TADOQuery);
var
i:integer;
begin
//生成列名
ListView1.Columns.Add.Caption:=' ';
ListView1.Columns.Add.Caption:=' ';
for i := 0 to ado.Fields.Count-1 do
with listview.Columns.Add do
begin
Caption := ado.Fields.DisplayLabel;
end;

//将记录写入行
dm.areareport.First;
while not dm.areareport.Eof do
begin
with ListView1.Items.Add do
begin
caption:=左边第一列标题;
subitems.add(左边第二列标题);
for i := 0 to dm.areareport.Fields.Count - 1 do
SubItems.Add(dm.areareport.Fields.AsString);
end;
dm.areareport.Next;
end;
end;

然后用这个函数来把listview里的内容输出到excel的worksheet里:
procedure to_execl( lv_:tlistview;ProgressBar_:tProgressBar);
var ea1,workbook_,sheet:variant;
c,r,i,j:integer;
tmp_sr,tmp_sr2,tmp_sr3:string;
begin
try
ea1:=createoleobject('excel.application');
except
showmessage('连接Excel出错');
exit;
end;
try
begin
workbook_:=ea1.Workbooks.Add;

r:=lv_.Items.Count;
c:= lv_.Columns.Count;

//ea1.Workbooks('aaaa').Worksheets[1];
sheet:=workbook_.Worksheets[1];
ProgressBar_.Visible:=true;
ProgressBar_.Min:=0;
ProgressBar_.Max:=r+1;
ProgressBar_.Position:=0;

for j:=1 to c do
begin
sheet.cells[1,j]:=StringReplace(lv_.Columns[j-1].Caption,'-','─',[rfReplaceAll]);
end;

for i:=2 to r+1 do
begin
for j:=1 to c do
begin
if j=1 then
tmp_sr:=lv_.Items[i-2].Caption
else
tmp_sr:=lv_.Items[i-2].SubItems[j-2];

if pos('-',tmp_sr)<>0 then
begin
tmp_sr2:=copy(tmp_sr,0,pos('-',tmp_sr)-1);
tmp_sr3:=copy(tmp_sr,pos('-',tmp_sr)+1,length(tmp_sr));
if pos('-',tmp_sr3)=0 then
tmp_sr:=tmp_sr2+'─'+tmp_sr3;
end;
sheet.cells[i,j]:=tmp_sr;
// ea1.activesheet.Columns[j].columnwidth := lv_.Columns[j].Width;
// sheet.cells[i,j]:=StringReplace(tmp_sr,'-','一',[rfReplaceAll]);
end;
ProgressBar_.Position:=ProgressBar_.Position+1;
end;
end
finally
begin
ea1.Visible:=true;
ProgressBar_.Visible:=false;
sheet:=null;
workbook_:=null;
ea1:=null;
end;
end;
end;
 
advstringgrid也不错啊,功能挺全的
 
首先谢谢楼上各位。
另外,我目前解决的方式是采用stringgrid,但是对于合并左边标题怎么实现呢?
例如:
-----------------------------------------------------------------
上标题一 上标题二
-----------------------------------------------------------------
|左边第二列标题| 数据 | 数据
此处要上下两格|--------------------------------------------------
合并 |左边第二列标题| 数据 | 数据
-----------------------------------------------------------------
左边第一列标题|左边第二列标题| 数据 | 数据
-----------------------------------------------------------------

看这个图示,怎么将上下或左右两格合并呢?
最好能给个例子,谢谢了。另外,Excel的方法我觉得也不错,对于excel我只做过简单的
程序,至于详细控制excel的就没有了,望大家给我点资料,我的邮件是:lmax@2911.net
 
哈哈,使用fastreport最方便,有关fastreport的使用请你在网上找一找很多关于它的.
 
-----------------------------------------------------------------
上标题一 上标题二
-----------------------------------------------------------------
|左边第二列标题| 数据 | 数据
此处要上下两格|--------------------------------------------------
合并 |左边第二列标题| 数据 | 数据
-----------------------------------------------------------------
左边第一列标题|左边第二列标题| 数据 | 数据
-----------------------------------------------------------------
可以用advstringgrid实现上图
ADVstringgrid1.MergeCells(0,0,1,2);从0行0列开始 合并两行一列
 

Similar threads

回复
0
查看
887
不得闲
回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部