我想实现把数据导出到execl中.可"系统状态:数据正在导出中.."显示不了,而且界面象死机了一样,最后数据还是导出的.
能不能把代码修改一下,谢谢各位了
procedure TForm12.Button1Click(Sender: TObject);
var
eclApp, WorkBook: Variant;
xlsFileName: String;
i, j: Integer;
FieldValue: String;
SaveDialog: TSaveDialog;
begin
SaveDialog:=TSaveDialog.Create(Application);
SaveDialog.DefaultExt:='.xls';
SaveDialog.Filter:= 'Excel文件|*.xls|所有文件|*.*';
if savedialog.Execute then
begin
xlsFileName:= SaveDialog.FileName;
try
eclApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleobject('Excel.Sheet');
except
ShowMessage('您的机器里未安裝Microsoft Excel!');
Exit;
end;
form2.statusbar1.Panels[1].Text:='系统状态:数据正在导出中....';
try
screen.Cursor:=crAppStart;
p1.Visible:=true;
WorkBook:= eclApp.workBooks.Add;
DBGrid1.DataSource.DataSet.First;
p1.min:=0;
p1.max:=DBGrid1.DataSource.DataSet.RecordCount+DBGrid1.Columns.Count;
p1.step:=1;
for i:= 0 to DBGrid1.Columns.Count - 1 do
begin
eclApp.Cells[1,i+1]:=DBGrid1.Columns.Items[i].Title.Caption;
end;
for i:= 0 to DBGrid1.DataSource.DataSet.RecordCount - 1 do
begin
for j:= 0 to DBGrid1.Columns.Count - 1 do
begin FieldValue:=DBGrid1.Columns[j].Field.AsString;
eclApp.Cells[i + 2, j + 1]:=FieldValue;
end;
p1.stepit;
DBGrid1.DataSource.DataSet.Next;
end;
form2.statusbar1.Panels[1].Text:='系统状态:数据导出完毕';
if FileExists(xlsFileName) then
begin
if Application.MessageBox('文件已经存在!' + #13 + #10 +
'是否进行替换?', '提示', MB_OKCANCEL +
MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
begin
DeleteFile(PChar(xlsFileName));
WorkBook.Saveas(xlsFileName);
WorkBook.Close;
eclApp.Quit;
eclApp:= Unassigned;
end;
end
else
begin
screen.Cursor:= crdefault;
WorkBook.Saveas(xlsFileName);
showmessage('保存EXECL文件成功,路径为:'+xlsFileName);
WorkBook.Close;
eclApp.Quit;
eclApp:= Unassigned;
end;
except
screen.Cursor:= crdefault;
form2.statusbar1.Panels[1].Text:='系统状态:数据导出出错';
ShowMessage('不能正确操作Excel文件。可能是該文件已被其他程序打开, 或系統错误。');
WorkBook.Close;
eclApp.Quit;
eclApp:=Unassigned;
end;
end;
end;
能不能把代码修改一下,谢谢各位了
procedure TForm12.Button1Click(Sender: TObject);
var
eclApp, WorkBook: Variant;
xlsFileName: String;
i, j: Integer;
FieldValue: String;
SaveDialog: TSaveDialog;
begin
SaveDialog:=TSaveDialog.Create(Application);
SaveDialog.DefaultExt:='.xls';
SaveDialog.Filter:= 'Excel文件|*.xls|所有文件|*.*';
if savedialog.Execute then
begin
xlsFileName:= SaveDialog.FileName;
try
eclApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleobject('Excel.Sheet');
except
ShowMessage('您的机器里未安裝Microsoft Excel!');
Exit;
end;
form2.statusbar1.Panels[1].Text:='系统状态:数据正在导出中....';
try
screen.Cursor:=crAppStart;
p1.Visible:=true;
WorkBook:= eclApp.workBooks.Add;
DBGrid1.DataSource.DataSet.First;
p1.min:=0;
p1.max:=DBGrid1.DataSource.DataSet.RecordCount+DBGrid1.Columns.Count;
p1.step:=1;
for i:= 0 to DBGrid1.Columns.Count - 1 do
begin
eclApp.Cells[1,i+1]:=DBGrid1.Columns.Items[i].Title.Caption;
end;
for i:= 0 to DBGrid1.DataSource.DataSet.RecordCount - 1 do
begin
for j:= 0 to DBGrid1.Columns.Count - 1 do
begin FieldValue:=DBGrid1.Columns[j].Field.AsString;
eclApp.Cells[i + 2, j + 1]:=FieldValue;
end;
p1.stepit;
DBGrid1.DataSource.DataSet.Next;
end;
form2.statusbar1.Panels[1].Text:='系统状态:数据导出完毕';
if FileExists(xlsFileName) then
begin
if Application.MessageBox('文件已经存在!' + #13 + #10 +
'是否进行替换?', '提示', MB_OKCANCEL +
MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
begin
DeleteFile(PChar(xlsFileName));
WorkBook.Saveas(xlsFileName);
WorkBook.Close;
eclApp.Quit;
eclApp:= Unassigned;
end;
end
else
begin
screen.Cursor:= crdefault;
WorkBook.Saveas(xlsFileName);
showmessage('保存EXECL文件成功,路径为:'+xlsFileName);
WorkBook.Close;
eclApp.Quit;
eclApp:= Unassigned;
end;
except
screen.Cursor:= crdefault;
form2.statusbar1.Panels[1].Text:='系统状态:数据导出出错';
ShowMessage('不能正确操作Excel文件。可能是該文件已被其他程序打开, 或系統错误。');
WorkBook.Close;
eclApp.Quit;
eclApp:=Unassigned;
end;
end;
end;
eclApp要释放加上VarClear(eclApp)这一句
procedure TfrmSelectSum.BitBtn1Click(Sender: TObject);
var
asheet,rang:variant;
i,j:integer;
begin
Screen.Cursor:=crHourGlass;
ExcelApplication1.Visible[0]:=True;
ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);
asheet:=ExcelApplication1.Worksheets.Item[1];for i:=0 to frmDataModule.QhzSum.RecordCount-1 do begin
for j:=0 to frmDataModule.QhzSum.FieldCount-1 do
asheet.cells[i+1,j+1].FormulaR1C1:=Trim(frmDataModule.QhzSum.Fields[j].AsVariant);
frmDataModule.QhzSum.Next;
end;
frmDataModule.QhzSum.First;
ExcelApplication1.Disconnect;
Screen.Cursor:=crDefault;
end;
querys.sql.clear;
querys.sql.add('select * into [excel 8.0;database=c:\abc.xls].book1 from temp');
querys.sql.execsql;