如何把两次查询的结果导出到同一个excel

leon2008go 2011-07-25 10:33:00
同一个button,两次查询结果,源代码生成了两个excel,现在我想把它们生成同一个excel,两个sheet,请问该怎么改.

XLApp:=CreateOleObject('Excel.Application');
XLApp.Visible:=False;
XLApp.WorkBooks.Add[XLWBatWorksheet];
XLApp.WorkBooks[1].WorkSheets[1].Name :='汇总表';
aSheet := XLApp.Workbooks[1].WorkSheets['汇总表'];

XLApp.WorkBooks.Add[XLWBatWorksheet];
XLApp.WorkBooks[2].WorkSheets[1].Name :='明细表';
aSheet := XLApp.Workbooks[2].WorkSheets['明细表'];
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxgyj 2011-07-25
  • 打赏
  • 举报
回复
XLApp.WorkBooks.Add[XLWBatWorksheet];

你WorkBooks.ADD两次,当然是两个了,第二个不要了
leon2008go 2011-07-25
  • 打赏
  • 举报
回复
能不能将我的代码改一下呢?
zhouguancheng 2011-07-25
  • 打赏
  • 举报
回复
高手啊
gxgyj 2011-07-25
  • 打赏
  • 举报
回复
给个过程给你,可以多个grid数据导到同一个excel


procedure CopyDbDataToExcel(Args: array of const;
s: array of string);
var
iCount,jCount: Integer;
XLApp:Variant;
Sheet:Variant;
I:Integer;
curr_,total_:Integer;
begin
if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;

Screen.Cursor := crAppStart;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;

try
XLApp := CreateOleObject('Excel.Application');
Except
Screen.Cursor := crDefault;
Exit;
end;

try
XLApp.SheetsInNewWorkbook := High(Args) + 1;
XLApp.WorkBooks.Add;

for I := Low(Args) to High(Args) do
begin

XLApp.WorkBooks[1].WorkSheets[I+1].name:=s[i];
Sheet:=XLApp.Workbooks[1].WorkSheets[s[i]];

//XLApp.WorkBooks[1].WorkSheets[I+1].Name:=TDBGrid(Args[I].VObject).Name;
//Sheet:=XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];

if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;

try
TDBGrid(Args[I].VObject).Enabled:=false;
TDBGrid(Args[I].VObject).DataSource.DataSet.DisableControls;

curr_:=1;
total_:=TDBGrid(Args[I].VObject).DataSource.DataSet.RecordCount;

//total_:=TDBGrid(Args[I].VObject).DataSource.DataSet.RecordCount-TDBGrid(Args[I].VObject).DataSource.DataSet.RecNo+1;
//ProgressBar1.Position:=0;
//ProgressBar1.Max:=TDBGrid(Args[I].VObject).DataSource.DataSet.RecordCount-TDBGrid(Args[I].VObject).DataSource.DataSet.RecNo;

TDBGrid(Args[I].VObject).DataSource.DataSet.first;

for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[1, iCount + 1] :=Trim(TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption);

jCount := 1;
while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do
begin
showMsg('i','正在导出数据,进度【'+inttostr(curr_)+'/'+inttostr(total_)+'】,请稍候');

for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[jCount + 1, iCount + 1] :=Trim(TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString);

Inc(jCount);
Inc(curr_);
TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
end;//end while

Sheet.columns.font.name:='微软雅黑';
Sheet.columns.font.size:=10;
Sheet.columns.HorizontalAlignment:=2;
Sheet.columns.autofit;

//Sheet.cells.HorizontalAlignment:=xlLeft;

finally
TDBGrid(Args[I].VObject).DataSource.DataSet.EnableControls;
TDBGrid(Args[I].VObject).Enabled:=True;
end;
end;
showMsg('i','正在打开文件,请稍候');
XlApp.Visible := True;
Screen.Cursor := crDefault;

//ProgressBar1.Position:=0;
finally
xlapp:=Unassigned;
Sheet:=Unassigned;
end;
end;

//调用:(示例导出四个dbgrid)
CopyDbDataToExcel([DBGrid_total_jz,DBGrid_total_qf,DBGrid_total_tj_ydw,DBGrid_total_tj_qy],['卷宗表单汇总','欠缴征收费明细','卷宗汇总统计(单位)','卷宗汇总统计(区域)']);
dc353269249 2011-07-25
  • 打赏
  • 举报
回复
这个问题对我来说很陌生,也想学学!
leon2008go 2011-07-25
  • 打赏
  • 举报
回复
搞掂,谢谢杰克逊
gxgyj 2011-07-25
  • 打赏
  • 举报
回复
写不写在于用不用

当要在一个sheet里写内容时,就会用到sheet


uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
XLApp:Variant;
aSheet:Variant;
begin
XLApp:=CreateOleObject('Excel.Application');
XLApp.Visible:=False;
XLApp.SheetsInNewWorkbook:=2;
XLApp.WorkBooks.Add;
XLApp.WorkBooks[1].WorkSheets[1].Name:='汇总表';
aSheet:=XLApp.Workbooks[1].WorkSheets['汇总表'];
aSheet.Cells[2,1]:='这是汇总表数据';

XLApp.WorkBooks[1].WorkSheets[2].Name:='明细表';
aSheet:=XLApp.Workbooks[1].WorkSheets['明细表'];
aSheet.Cells[5,3]:='这是明细表数据';

XLApp.Visible:=True;
end;
leon2008go 2011-07-25
  • 打赏
  • 举报
回复
aSheet那句没写呢
gxgyj 2011-07-25
  • 打赏
  • 举报
回复

uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
XLApp:Variant;
begin
XLApp:=CreateOleObject('Excel.Application');
XLApp.Visible:=False;
XLApp.SheetsInNewWorkbook := 2;
XLApp.WorkBooks.Add;
XLApp.WorkBooks[1].WorkSheets[1].Name :='汇总表';
XLApp.WorkBooks[1].WorkSheets[2].Name :='明细表';
XLApp.Visible := True;
end;
leon2008go 2011-07-25
  • 打赏
  • 举报
回复
第二个不要了,说索引错误

5,388

社区成员

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

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