我的要求:自动打开Excel文档,读数据,写数据,然后再保存该Excel文档,再退出该Excel文档,当然不能关闭其他Excel的文档。以下是我的代码,运行到后来总是提示“类Workbook的SaveAs方法无效”如利用ExlApp.WorkBooks.Save(),也提示“Methord ‘save’ not supported by automation object”请问我这里该如何写啊????急啊??  try
    //创建对象
    ExlApp := CreateOleObject( 'Excel.Application' );
  except
    MessageDlg('您的机器里未安装Microsoft Excel!', mtError, [mbOk], 0);
    exit;
  end;  //打开已存在的Excel文档
  ExlApp.WorkBooks.Open(self.OpenDialog1.FileName);
  ExlApp.Visible:=False;
  //Screen.Cursor:=crSQLWait;
L: for i:=2 to ExlApp.ActiveSheet.UsedRange.Rows.Count do
  begin
    //取出各个单元格,并对某些单元格进行判断
    str_xm:=ExlApp.Cells[i,1].Value;
    str_xb:=ExlApp.Cells[i,2].Value;
    str_sfzh:=ExlApp.Cells[i,3].Value;
    str_cbrq:=ExlApp.Cells[i,4].Value;
    str_rylb:=ExlApp.Cells[i,5].Value;
    str_dbzh:=ExlApp.Cells[i,6].Value;
    str_jtdz:=ExlApp.Cells[i,7].Value;
    str_jtdh:=ExlApp.Cells[i,8].Value;
    str_yhzh:=ExlApp.Cells[i,9].Value;
    str_hm:=ExlApp.Cells[i,10].Value;
    str_xyh:=ExlApp.Cells[i,11].Value;
    //判断身份证号的位数及校验的正确性
    iLen:=length(str_sfzh);
    if (iLen<>18) and (iLen<>15) then
    begin
      serrmsg:='该行身份证号位数不对,应为18位或15位!';
      goto L1;
    end;
L1:
        //把错误信息写入到Excel的最后一列中
        ExlApp.Cells[i,12].Value:=serrmsg;
        n:=n+1;   //不成功的记录数  end;  ExlApp.DisplayAlerts:=false;
  //ExlApp.WorkBooks.Save();
  ExlApp.ActiveWorkBook.SaveAs(EdtSbsj.Text,false);
  ExlApp.WorkBooks.Close(EdtSbsj.Text);
  ExlApp.Quit;
  ExlApp:=Unassigned;
  if n=0 then
    Application.MessageBox(pchar('成功导入'+inttostr(m)+'条数据!'),'批量申报导入')
  else
    Application.MessageBox(pchar('共有'+inttostr(m+n)+'条数据进行导入,导入成功'+inttostr(m)+'条;导入错误'+inttostr(n)+'条! 如有错误记录,请到原文件中查看错误原因。'),'批量申报导入')

解决方案 »

  1.   

    ExlApp.Visible:=False;改成
    ExlApp.Visible:=true; 试试,看能不能存.有时不可见的不好操作 
      

  2.   

    专为你的问题写的代码:花了近2小时:
    procedure TFrmOrderFind.Excel1Click(Sender: TObject);
    var
      ExcelApplication1:TExcelApplication;
      ExcelWorksheet1:TExcelWorksheet;
      ExcelWorkbook1:TExcelWorkbook;
    begin
      try
        begin
          ExcelApplication1:=TExcelApplication.Create(Application);
          ExcelWorksheet1:=TExcelWorksheet.Create(Application);
          ExcelWorkbook1:=TExcelWorkbook.Create(Application);
          ExcelApplication1.Connect;
        end;
      except
          ShowMessage('没有安装EXCEL2000!!!');
          exit;
      end;
      ExcelApplication1.Workbooks.Add(EmptyParam,0);
      ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
      ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1]   as   _worksheet);
      ExcelWorksheet1.Cells.item[1,1]:='11';
      ExcelWorksheet1.Cells.item[1,2]:='12';
      ExcelWorksheet1.Cells.item[1,3]:='13';
      //ExcelApplication1.Visible[0]:=true;  //可以让其不可见
      ExcelApplication1.Save(ExtractFilePath(application.ExeName)+'myexlttt1.xls');
      //上面哪一句会弹出一个对话框来,建议最好不要使用上面的哪一句;
      //保存通通用下面这一句,我刚写的代码,在2003server测试通过.
      ExcelWorksheet1.SaveAs(ExtractFilePath(application.ExeName)+'myexlttt2.xls');
      ExcelApplication1.Disconnect;
      ExcelApplication1.Quit;
      ExcelApplication1.Free;
      ExcelWorksheet1.Free;
      ExcelWorkbook1.Free;
    end;