//自定义导出Excel
function uf_Ex2();
var
s:TStringList;
str,filePath:string;
i1,i2 :Integer;
sd: TSaveDialog;
begin
//try
if SKBILLgrid1.DataSource.DataSet.IsEmpty then
begin
messagebox('没有可导出的数据','运行提示',0);
exit;
end;
sd := TSaveDialog.Create(Self);
sd.Title := '请选择保存路径';
sd.Filter := '*.xls|*.xls';
sd.DefaultExt := '.xls';
if sd.Execute and (trim(sd.FileName) <> '') then
begin
//保存路径
filePath := Trim(sd.FileName);
//messagebox(filePath,'运行提示',0);
//导中文表头
str :='';
for i1 :=0 to SKBILLgrid1.Columns.Count - 1 do
begin
str := str + SKBILLgrid1.Columns.Items[i1].Title.Caption + #9;
end;
str := str + #13;
try
dssub1.DisableControls;
dssub1.First;
while not dssub1.Eof do
begin
for i2 := 0 to SKBILLgrid1.Columns.Count -1 do
begin
str := str + dssub1.FieldByName(SKBILLgrid1.Columns.Items[i2].FieldName).AsString + #9;
end;
dssub1.Next;
str := str + #13;
end;
finally
dssub1.EnableControls;
end;
str := str + #13;
try
s:=TStringList.Create;
s.Add(str);
s.SaveToFile(filePath);
messagebox('导出成功!','运行提示',0);
except
messagebox('导出失败!','运行提示',0);
s.Free;
sd.Free;
end;
end;
//except
//messagebox('导出失败!','运行提示',0);
//end;
end;
方案1,2都有个缺点,条目数多了以后,导出很慢,或卡死。