我用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;