按你的格式来生成报表,先把查询结果写入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;