在delphi中,能否将查询结果直接保存为excel表 一行一行输出很慢,我想一下子存到excel表中 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 存为.slk 格式啊,很快的啊 有一个控件叫xls writer,据说速度极快:10万行/分。 导出到excel;.................................................................................................procedure DataToExcel(Grid:TDbGrid;DataSet:TDataset;Title:String;sExcelFile:String);var i,j,Row:integer; WB: _WorkBook; WBs: Workbooks; FExcelWasFound:Boolean; ExcelFile:string; FileHandle: integer; irange:range; iWidth:integer; //oFont:olevariant;begin try Screen.Cursor :=crHourGlass ; {for i:=0 to Grid.Columns.Count -1 do begin Dataset.Fields[i].DisplayWidth :=Grid.Columns[i].Width; end; } ExcelFile:=sExcelFile; if not fileExists(ExcelFile) then begin FileHandle:=FileCreate(ExcelFile); Fileclose(FileHandle); end; FExcelWasFound := True; try FApp := CreateOleObject('Excel.Application.9') as _Application; //调用Excel2000 except FExcelWasFound := False; end; if not FExcelWasFound then //如果不存在,则调用Excel97 try FApp := CreateOleObject('Excel.Application.8') as _Application; FExcelWasFound := True; except FExcelWasFound := False; ShowMessage('Excel调用失败!'); end; if FExcelWasFound then begin InitVariables; New(FSPms); with FApp ,FSPms^ do begin App_SheetsInNewWorkbook := Get_SheetsInNewWorkbook(0); App_DisplayFormulaBar := Get_DisplayFormulaBar(0); App_ReferenceStyle := Get_ReferenceStyle(0); App_DisplayStatusBar := Get_DisplayStatusBar(0); Set_SheetsInNewWorkbook(0, 1); WBs := Get_Workbooks; //打开Excel文件 WB := WBs.Open(excelFile, 3, false, 1, '', '', True, $00000002, 1, False, False, Null, False, 0); MakeVBScript(WB); //初始化文件属性 end; with FApp do begin Set_DisplayFormulaBar(0, False); Set_ReferenceStyle(0, Integer(xlR1C1)); Set_DisplayStatusBar(0, False); Set_Caption(Title); end; try Row:=1; irange:=Fapp.ActiveCell ; irange.Font.Size :=9; for j:=0 to Grid.FieldCount -1 do begin if Grid.Columns[j].Visible =true then begin if DataSet.Fields[j].displaywidth>254 then iRange.ColumnWidth:=100 else begin //iWidth:=Grid.Columns[j].Width; iRange.ColumnWidth :=Grid.Columns[j].Field.DisplayWidth ; end; irange.Font.Size :=9; //ljq 2001/03/09 irange.value:=Grid.Columns[j].Title.Caption ; irange:=irange.Next; end; end; except ShowMessage('调用Excel出错!'); fApp._Release; Screen.Cursor :=crDefault ; exit; end; Row:=Row+2; DataSet.DisableControls; DataSet.First; FApp.Get_ActiveWindow.DisplayZeros := True; irange.NumberFormat:=10; for i:=0 to DataSet.RecordCount -1 do begin irange:=Fapp.Range['A'+IntToStr(Row),'A'+intToStr(Row)]; for j:=0 to Grid.FieldCount -1 Do begin if Grid.Columns[j].Visible =True then begin if Grid<>nil then begin iRange.Font.Size :=Grid.Font.Size; iRange.Font.Name :=Grid.Font.Name; end else begin irange.Font.Size :=FFontSize; irange.Font.Name :=FFontName; end; //edit by ljq 2001/03/09 iRange.Value :=Grid.Columns[j].Field.AsString ; irange:=iRange.Next ; end; end; DataSet.next; Row:=Row+1; end; Screen.Cursor :=crDefault ; DataSet.EnableControls; irange:=FApp.Range['A1','K'+intToStr(Row-1)]; FApp.Set_Visible(0,True); CreateToolBar(False); //屏蔽Excel的系统菜单,采用自定义菜单实现 end else begin ShowMessage('调用Excel2000或Excel97失败,请确认是否安装!'+#13#13+' 如果未安装,请先安装office'); Screen.Cursor :=crDefault ; end; except ShowMessage('调用Excel出错!'); fApp._Release; Screen.Cursor :=crDefault ; exit; end;end; DELPHI的Abstract Error cxgrid的离开事件问题 请教:PChar支持哪些操作! sql语句中如果字段内容为null,则用0代替,sql语句该怎么写? 请个位高手帮帮忙,dbgrid问题 超出一个月未结贴的名单公布 入门者的问题 请教在WinAPI下实现去掉CheckBox的勾选? 网络上控件太多,谁能提供几个带源码,有DEMO的精典的控件给我 难道就没有人会吗?---在同一行将内容打印两遍! 为什么我把可执行文件改名后,在任务栏上显示不一样呢? 怎么将鼠标放于控件上的提示(黄色提示窗体)替换成自定义窗体~?
10万行/分。
.................................................................................................
procedure DataToExcel(Grid:TDbGrid;DataSet:TDataset;Title:String;sExcelFile:String);
var
i,j,Row:integer;
WB: _WorkBook;
WBs: Workbooks;
FExcelWasFound:Boolean;
ExcelFile:string;
FileHandle: integer;
irange:range;
iWidth:integer;
//oFont:olevariant;
begin
try
Screen.Cursor :=crHourGlass ;
{for i:=0 to Grid.Columns.Count -1 do
begin
Dataset.Fields[i].DisplayWidth :=Grid.Columns[i].Width;
end; }
ExcelFile:=sExcelFile;
if not fileExists(ExcelFile) then
begin
FileHandle:=FileCreate(ExcelFile);
Fileclose(FileHandle);
end;
FExcelWasFound := True;
try
FApp := CreateOleObject('Excel.Application.9') as _Application; //调用Excel2000
except
FExcelWasFound := False;
end;
if not FExcelWasFound then //如果不存在,则调用Excel97
try
FApp := CreateOleObject('Excel.Application.8') as _Application;
FExcelWasFound := True;
except
FExcelWasFound := False;
ShowMessage('Excel调用失败!');
end;
if FExcelWasFound then
begin
InitVariables;
New(FSPms);
with FApp ,FSPms^ do
begin
App_SheetsInNewWorkbook := Get_SheetsInNewWorkbook(0);
App_DisplayFormulaBar := Get_DisplayFormulaBar(0);
App_ReferenceStyle := Get_ReferenceStyle(0);
App_DisplayStatusBar := Get_DisplayStatusBar(0);
Set_SheetsInNewWorkbook(0, 1);
WBs := Get_Workbooks; //打开Excel文件
WB := WBs.Open(excelFile, 3, false, 1,
'', '', True, $00000002, 1, False,
False, Null, False, 0);
MakeVBScript(WB); //初始化文件属性
end;
with FApp do
begin
Set_DisplayFormulaBar(0, False);
Set_ReferenceStyle(0, Integer(xlR1C1));
Set_DisplayStatusBar(0, False);
Set_Caption(Title);
end;
try
Row:=1;
irange:=Fapp.ActiveCell ;
irange.Font.Size :=9;
for j:=0 to Grid.FieldCount -1 do
begin
if Grid.Columns[j].Visible =true then
begin
if DataSet.Fields[j].displaywidth>254 then
iRange.ColumnWidth:=100
else
begin
//iWidth:=Grid.Columns[j].Width;
iRange.ColumnWidth :=Grid.Columns[j].Field.DisplayWidth ;
end;
irange.Font.Size :=9; //ljq 2001/03/09
irange.value:=Grid.Columns[j].Title.Caption ;
irange:=irange.Next;
end;
end;
except
ShowMessage('调用Excel出错!');
fApp._Release;
Screen.Cursor :=crDefault ;
exit;
end;
Row:=Row+2;
DataSet.DisableControls;
DataSet.First;
FApp.Get_ActiveWindow.DisplayZeros := True;
irange.NumberFormat:=10;
for i:=0 to DataSet.RecordCount -1 do
begin
irange:=Fapp.Range['A'+IntToStr(Row),'A'+intToStr(Row)];
for j:=0 to Grid.FieldCount -1 Do
begin
if Grid.Columns[j].Visible =True then
begin
if Grid<>nil then
begin
iRange.Font.Size :=Grid.Font.Size;
iRange.Font.Name :=Grid.Font.Name;
end
else
begin
irange.Font.Size :=FFontSize;
irange.Font.Name :=FFontName;
end; //edit by ljq 2001/03/09
iRange.Value :=Grid.Columns[j].Field.AsString ;
irange:=iRange.Next ;
end;
end;
DataSet.next;
Row:=Row+1;
end;
Screen.Cursor :=crDefault ;
DataSet.EnableControls;
irange:=FApp.Range['A1','K'+intToStr(Row-1)];
FApp.Set_Visible(0,True);
CreateToolBar(False); //屏蔽Excel的系统菜单,采用自定义菜单实现
end else
begin
ShowMessage('调用Excel2000或Excel97失败,请确认是否安装!'+#13#13+' 如果未安装,请先安装office');
Screen.Cursor :=crDefault ;
end;
except
ShowMessage('调用Excel出错!');
fApp._Release;
Screen.Cursor :=crDefault ;
exit;
end;
end;