我用savedialog控件实现excel的导出,现在有一个问题,弹出那个选择路径的对话框,如果选择‘保存’能够成功,但是如果选择‘取消’,就会报错:无法访问文件,请尝试下列方法之一
确认所指定的文件夹已存在。 确认文件所在的文件夹不是只读的。 确认给出的文件名不包含下列字符:<>?[]:Sheet1.xls或*。 确认文件/路径名长度不超过218个字符。执行断点发现是走到了 saveas(filename)这儿出错了。代码如下
procedure TDataM_Pub.ExportToExcel(DBGridEh:TDBGridEh;filename:string);
var
str:string;
i,j:Integer;
excelapp,WookBook,sheet:Variant;
begin
str:='';
DBGridEh.DataSource.DataSet.DisableControls; //关闭数据集连接
for i:=0 to DBGridEh.DataSource.DataSet.FieldCount-1 do //i从0到DBGrid列数-1
begin
str:=str+DBGridEh.DataSource.DataSet.fields[i].DisplayLabel+char(9);//excel第一行为DBGrid字段名
end;
str:=str+#13;
DBGridEh.DataSource.DataSet.First;
while not(DBGridEh.DataSource.DataSet.eof) do //当数据集没有到最后一行
begin
for i:=0 to DBGridEh.DataSource.DataSet.RecordCount-1 do//从0到数据集的记录数-1
begin
for j:=0 to DBGridEh.DataSource.DataSet.FieldCount-1 do//i从0到数据集的字段数-1
begin
str:=str+DBGridEh.DataSource.DataSet.Fields[j].AsString+char(9);//字符串添加字段值
end;
str:=str+#13;
DBGridEh.DataSource.DataSet.next;
Application.ProcessMessages;
end; end;//end while DBGridEh.DataSource.DataSet.EnableControls; clipboard.Clear;//清空剪切板
Clipboard.Open; //打开剪切板
Clipboard.AsText:=str;//粘贴到剪切板
Clipboard.Close;
excelapp:=createoleobject('excel.application');//创建excel表
WookBook:=excelapp.workbooks.add; // excelapp.workbooks.add(-4167);
sheet:=excelapp.workbooks[1].worksheets[1];
sheet.name:='sheet1';
sheet.paste;
Clipboard.Clear;
Sheet.rows[1].font.color:=clred;
sheet.saveas(filename);
excelapp.quit;
excelapp:= unassigned;
确认所指定的文件夹已存在。 确认文件所在的文件夹不是只读的。 确认给出的文件名不包含下列字符:<>?[]:Sheet1.xls或*。 确认文件/路径名长度不超过218个字符。执行断点发现是走到了 saveas(filename)这儿出错了。代码如下
procedure TDataM_Pub.ExportToExcel(DBGridEh:TDBGridEh;filename:string);
var
str:string;
i,j:Integer;
excelapp,WookBook,sheet:Variant;
begin
str:='';
DBGridEh.DataSource.DataSet.DisableControls; //关闭数据集连接
for i:=0 to DBGridEh.DataSource.DataSet.FieldCount-1 do //i从0到DBGrid列数-1
begin
str:=str+DBGridEh.DataSource.DataSet.fields[i].DisplayLabel+char(9);//excel第一行为DBGrid字段名
end;
str:=str+#13;
DBGridEh.DataSource.DataSet.First;
while not(DBGridEh.DataSource.DataSet.eof) do //当数据集没有到最后一行
begin
for i:=0 to DBGridEh.DataSource.DataSet.RecordCount-1 do//从0到数据集的记录数-1
begin
for j:=0 to DBGridEh.DataSource.DataSet.FieldCount-1 do//i从0到数据集的字段数-1
begin
str:=str+DBGridEh.DataSource.DataSet.Fields[j].AsString+char(9);//字符串添加字段值
end;
str:=str+#13;
DBGridEh.DataSource.DataSet.next;
Application.ProcessMessages;
end; end;//end while DBGridEh.DataSource.DataSet.EnableControls; clipboard.Clear;//清空剪切板
Clipboard.Open; //打开剪切板
Clipboard.AsText:=str;//粘贴到剪切板
Clipboard.Close;
excelapp:=createoleobject('excel.application');//创建excel表
WookBook:=excelapp.workbooks.add; // excelapp.workbooks.add(-4167);
sheet:=excelapp.workbooks[1].worksheets[1];
sheet.name:='sheet1';
sheet.paste;
Clipboard.Clear;
Sheet.rows[1].font.color:=clred;
sheet.saveas(filename);
excelapp.quit;
excelapp:= unassigned;
if SaveDialog1.Execute then
begin
...
saveas(SaveDialog1.FileName);
end
...
sheet.saveas(filename);改成
sheet.WorkBooks[1].SaveAs(filename);
试试