Procedure TOutPutMaintain_Detail_F.DbgridToExcel(Title: String; DbGrid: TbsSkinDBGrid);
Var
     ExcelApp, WorkBook: Variant;
     i, j: Integer;
     Row, Col: Integer;
     FieldName: String;
     DataSet: TDataSet;
     S: String;
Begin
     //   数据发送到   Excel
     Try
          ExcelApp := CreateOleObject('Excel.Application');
          WorkBook := CreateOleObject('Excel.Sheet');
     Except
          Application.MessageBox('你的机器里未安装Microsoft   Excel.           ', '', 32);
          exit;
     End;     Application.ProcessMessages;
     WorkBook := ExcelApp.WorkBooks.Add;
     Col := 1;
     ExcelApp.Cells(2, Col) := Title;
     Row := 1;
     DataSet := DbGrid.DataSource.DataSet;
     For i := 0 To DbGrid.Columns.Count - 1 Do
     Begin
          If DbGrid.Columns[i].Visible Then
          Begin
               FieldName := DbGrid.Columns[i].Title.Caption;
               ExcelApp.Cells(Row, Col) := FieldName;
               Col := Col + 1;
          End;
     End;     Row := Row + 1;     DataSet.First;
     While Not DataSet.Eof Do
     Begin
          Col := 1;
          For j := 0 To DbGrid.Columns.Count - 1 Do
          Begin
               FieldName := DbGrid.Columns[j].FieldName;
               ExcelApp.Cells(Row, Col) := '   ' + DataSet.FieldByName(FieldName).AsString + '   ';
               Col := Col + 1;
          End;
          Row := Row + 1;
          DataSet.Next;
     End;     ExcelApp.ActiveWorkBook.SaveAs(Title);
     ExcelApp.Quit;
     ExcelApp := Unassigned;
End;
这个方法导出excel是没问题的,但是如果填写要保存的文件名已存在的话,excel会提示是否覆盖那个已存在的文件这时候点"是"也没问题,主要是点了"否"活着"取消"前台就会报错如下"类workbook的SaveAs的方法无效 错误eoleException".这是什么原因呢?各位高手能给小弟一个答复吗?万分感谢!!

解决方案 »

  1.   

    加一个savedialog组件
    用"if fileexists(savedialog1.FileName) then"判断文件是否存在--------------------------------------------------------------------------
    具体代码就省了,如果不会,网上多的是,搜搜就有了
      

  2.   

    我写了这个if fileexists(savedialog1.FileName) then 
    begin
    if dlgmessagebox("文件已存在是否覆盖",mtconfirmation,[mbYES,mbNO],0)=mrYES then
    然后如果要覆盖原来的excel应该怎么写这句话还是
    ExcelApp.ActiveWorkBook.SaveAs(Title);类似这样还是怎么保存
      

  3.   

    SD为SaveDialog,以下代码未测试:      if FileExists(SD.FileName) then
          begin
            if MessageBox(Application.Handle, PChar('"'+SD.FileName+'"文件已存在,要替换它吗?'),'*系统提示*',MB_OKCANCEL + MB_DEFBUTTON2 + MB_ICONQUESTION)=mrOk then
            begin
              if not DeleteFile(SD.FileName) then
              begin
                ShowMessage('文件导出失败!');
                Exit;
              end
            end else
              Exit;
          end;
     ExcelApp.ActiveWorkBook.SaveAs(SD.FileName);
      

  4.   

    if FileExists(SaveDialog1.FileName) and (MessageDlg(Format('是否覆盖文件 "%s"?', [SaveDialog1.FileName]),mtWarning, [mbYes, mbNo], 0) <> mrYes) then
     begin
            Exit;
     end
     else
     begin
            DeleteFile(SaveDialog1.FileName);
            ExcelApp.ActiveWorkBook.SaveAs(SaveDialog1.FileName);
            ExcelApp.Quit;
            ExcelApp := Unassigned;
     end;