5,388
社区成员
发帖
与我相关
我的任务
分享
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],['卷宗表单汇总','欠缴征收费明细','卷宗汇总统计(单位)','卷宗汇总统计(区域)']);
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;
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;