导出到EXCEL文件时,用的下面的代码:
SaveFileDialog.Options := SaveFileDialog.Options + [ofOverwritePrompt]; //A行
...
MSExcel.ActiveWorkBook.SaveAs(FileName); //B行
但如果导出的文件名已经存在,那在A行的时候就提示文件已存在,是否覆盖。
如果选择是,运行到B行的时候,还是会报文件已存在,是否覆盖?(提示的窗口名是Microsoft Excel),
第一次的提示是正常的,请问如何能够屏蔽第二次的提示,而直接保存呢?
SaveFileDialog.Options := SaveFileDialog.Options + [ofOverwritePrompt]; //A行
...
MSExcel.ActiveWorkBook.SaveAs(FileName); //B行
但如果导出的文件名已经存在,那在A行的时候就提示文件已存在,是否覆盖。
如果选择是,运行到B行的时候,还是会报文件已存在,是否覆盖?(提示的窗口名是Microsoft Excel),
第一次的提示是正常的,请问如何能够屏蔽第二次的提示,而直接保存呢?
还有一个就是你说的“把导出的XLS放到内存中,导出完后再SAVE ”这个过程怎么实现,能不能给一些例子呢,谢谢。
DlgSave.Filter := '*.xls|*.xls';
if DlgSave.Execute then
begin
application.ProcessMessages;
filename := DlgSave.FileName;
try
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Caption := 'Excel-cms2002';
MyWorkBook := CreateOleobject('Excel.Sheet');
except
application.Messagebox('无法打开Xls文件,请确认已 经安装EXCEL.', '',
mb_OK + mb_IconStop);
exit;
end;
MyworkBook := ExcelApp.workBooks.Add();
application.ProcessMessages;
ExcelApp.WorkSheets[1].Activate;
myworkbook.worksheets[1].Name := 'ABC';
for i := 1 to a_FiledNo do //转化字段名;
begin
//eclApp.cells(1,i) :=Form3.DBGrid4.Columns[i-1].Title.caption ;
excelapp.cells(1, i) := DBGrideh1.Fields[i - 1].DisplayLabel;
end;
DBGrideh1.DataSource.DataSet.First;
// excelapp.cells(2,1):=dbgrid1.Fields [1].Value ;
for k := 1 to a_recno do //Form3.a_recno
begin
for j := 1 to a_filedNo do //转化一个记录
begin
//excelapp.cells(k+1,j) :=DbGrid1.Fields[j-1].Value ;
excelapp.cells.item[k + 1, j] :=
DbGrideh1.Fields[j - 1].AsString;
end;
DBGrideh1.DataSource.DataSet.Next;
end;
ExcelApp.Columns.AutoFit;
ExcelApp.ActiveWorkBook.SaveAs(FileName);
ExcelApp.WorkBooks.Close;
application.MessageBox('数据导出成....', '数据导出', 0);
ExcelApp.Quit;
DlgSave.Destroy;
function TFrm_student.S_IsFileInUse(FileName : string ) : boolean;
var
HFileRes : HFILE;
begin
Result := false;
if not FileExists(FileName) then
exit;
HFileRes := CreateFile(pchar(FileName), GENERIC_READ or GENERIC_WRITE,0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not Result then
CloseHandle(HFileRes);
end;
procedure TFrm_student.suiButton11Click(Sender: TObject);
Var
ExcelApp:Variant;
SaveDialog1: TSaveDialog;
i,j,row,column:integer;
begin
//dm.Apps.Get_Seek_Result(querystr,1);
with dm.ClientDataSet1 do begin
querycount:=RecordCount;
close;open;
if dm.ClientDataSet1.IsEmpty then
begin
ShowMessage('没有数据需要存盘!');//test
Exit;
end;
SaveDialog1:= TSaveDialog.Create(nil);
SaveDialog1.Filter := 'Excel 文件 (*.xls)|*.xls';
SaveDialog1.Title:='确定另存为excel的文件名';
if savedialog1.Execute Then
begin
while S_IsFileInUse(savedialog1.FileName) do
begin
case Application.MessageBox(PChar('无法存盘,'+string(ExtractFileName(savedialog1.FileName))+'正在使用中'), '请确认', MB_ICONQuestion+MB_ABORTRETRYIGNORE+MB_DEFBUTTON2) of
IDAbort:
begin
SaveDialog1.Free;
Exit;
end;
IDRetry:
begin
continue;
end;
IDIgnore:
begin
if Not savedialog1.Execute then break;
end;
end;
end;
end
else
begin
SaveDialog1.Free;
exit;
end;//if
try
ExcelApp:=CreateOleObject('Excel.Application');//首先创建 Excel 对象,使用ComObj
except
Application.Messagebox('Excel没有安装!','Hello',MB_ICONERROR + mb_Ok);
Abort;
end;//end try
try
ExcelApp.Visible := False;//显示当前窗口
ExcelApp.Caption := '应用程序调用 Microsoft Excel';//更改 Excel 标题栏
ExcelApp.WorkBooks.Add;//添加新工作簿:
ExcelApp.WorkSheets[ 'Sheet1' ].Activate;//设置第1个工作表为活动工作表
ExcelApp.ActiveSheet.Rows[1].Font.Size:=10;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
row:=1;
column:=1;
for j:= 0 to dm.ClientDataSet1.FieldCount-1 do
begin
ExcelApp.Cells[row,column].Value:=dm.ClientDataSet1.Fields[j].DisplayLabel;
column:=column+1;
end;
row:=2;
while (Not dm.ClientDataSet1.Eof) and (Not dm.ClientDataSet1.IsEmpty) do
begin
column:=1;
for i:=1 to dm.ClientDataSet1.FieldCount do
begin
ExcelApp.Cells[row,column].Value:=dm.ClientDataSet1.fields[i-1].AsString;
column:=column+1;
end;
dm.ClientDataSet1.Next;
row:=row+1;
end;
if Not S_IsFileInUse(savedialog1.FileName) then
try
ExcelApp.ActiveWorkBook.SaveAs(savedialog1.filename);
except
SaveDialog1.Free;
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
ExcelApp:= Unassigned;
exit;
end;
SaveDialog1.Free;
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
ExcelApp:= Unassigned;
Application.MessageBox('Excel文件导出成功!','成功',MB_OK);
except
SaveDialog1.Free;
ExcelApp:= Unassigned;
end;
end;
end;
procedure myclass.ExportToExcel(DataSet: TDataSet;filename:string;SheetName:string;VisibleExcel:bool;pbr:tProgressbar);
var
myexcel:Variant;
mysheet:Variant;
range:variant;
i,j:integer;
//****************************
begin
try
myexcel:=createoleobject('excel.application');
myexcel.Visible :=VisibleExcel;
myexcel.Workbooks.Add;//新建EXCEL文件
// myexcel.Workbooks[1].WorkSheets[1].Name:= '报表测试';
// myexcel.Workbooks[1].WorkSheets[2].delete;
// myexcel.Workbooks[1].WorkSheets[3].delete;
// mySheet:= v.Workbooks[1].WorkSheets['报表测试'];//等效下面的语句
mysheet:= myexcel.Workbooks[1].WorkSheets[1];
//添加单元格内容
with dataset do
begin pbr.Min :=0;
pbr.Max:=recordcount;
//列出字段名称。
for j:=0 to FieldCount-1 do mysheet.cells[1,j+1]:=Fields[j].FieldName ; for i:=0 to recordcount-1 do
begin
pbr.Position:=i; //显示进度。
for j:=0 to fieldcount-1 do
begin
mysheet.cells[2+i,1+j]:=dataset.Fields[j].AsString;
// mysheet.cells[2+i,1+j]:=vartostr(fields[j].Value );
application.ProcessMessages ;
end;
next;
end;
end;
{ //*********************************设置报表外观 开始*******************************************
//设置列标题
Range := mysheet.Range['A1:O1'];//单元格从A2到M2
Range.Rows.RowHeight :=25; //设置行高
Range.Columns.ColumnWidth := 25; // 设置列宽
Range.Borders.LineStyle := 1; //加边框
//Range.FormulaR1C1 := '合并区';
Range.HorizontalAlignment := 3;//xlCenter(水平对齐方式)
Range.VerticalAlignment := 2;//xlCenter(垂直对齐方式)
Range.Characters.Font.Name := '楷体';//字体
Range.Characters.Font.FontStyle:= '加粗';
Range.Characters.Font.Size := 15;
Range.Characters.Font.OutlineFont := False;//是否有下划线
Range.Characters.Font.ColorIndex := 1;//xlAutomatic//颜色
//设置字段
Range := mysheet.Range['A2:O'+inttostr(i)];//单元格从A2到M2
Range.Rows.RowHeight :=15; //设置行高
Range.Columns.ColumnWidth := 25; // 设置列宽
Range.Borders.LineStyle := 0; //加边框
Range.Characters.Font.Name := '宋体';//字体
Range.Characters.Font.Size := 12;
Range.Characters.Font.ColorIndex :=0;//xlAutomatic//颜色 //**********************************设置报表外观 结束**************************************** }// myexcel.visible:=true;
myexcel.WorkBooks[1].Close(True, filename);//取文件名退出
myexcel.Quit;//退出EXCEL Except
//错误处理
Showmessage('导出时出现错误!!!');
myexcel.DisplayAlerts := false;//是否提示存盘
myexcel.Quit;//退出EXCEL
exit;
end;
// Application.Restore;
// Application.BringToFront ;end;