我在程序中打开一个excel表,然后往里面输入内容。最后存盘。然后我到文件所在目录打开那个文件第一次能打开,多弄几次就会打不开。 后来我在进程管理器看到有几个进程 EXCEL.exe 。我关闭这些进程后,就能打开那个存盘的文件。 我想关于excel操作代码肯定有问题。 请帮忙看下?代码:
  try
    ExcelApp := CreateOleObject('Excel.Application');
  except
    Application.MessageBox('你的机器里未安装Microsoft Excel.', '', 32);
    Exit;
  end;
  WorkBook := ExcelApp.WorkBooks.add; /////省略往sheet里写数据的代码  ExcelApp.activesheet.saveAs(filename);  //存盘 filename是文件路径名  ExcelApp.WorkBooks.Close;      
  ExcelApp.Quit;这段代码哪里没有关闭打开的excel进程呀? 还是应该怎么写?

解决方案 »

  1.   

    procedure TForm1.Button10Click(Sender: TObject);
    var
    Temp_Worksheet: _WorkSheet;
    i,j,m ,sa,xa,sj,xj: integer;
    begin
    ExcelApplication1.Connect;
    ExcelApplication1.Visible[0] := false;
    if CheckBox1.Checked  then
    ExcelApplication1.Caption := '百分比数据'
    else
    ExcelApplication1.Caption := '索力数据数据';
    ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
    Temp_Worksheet:=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
    ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
    ExcelWorksheet1.Name := 'moumou';ExcelApplication1.Columns.ColumnWidth := 12;ExcelApplication1.Cells.Item[1,1] := '索号';
    ExcelApplication1.Cells.Item[1,2] := '下游江';
    ExcelApplication1.Cells.Item[1,3] := '上游江';
    ExcelApplication1.Cells.Item[1,4] := '索号';
    ExcelApplication1.Cells.Item[1,5] := '上游岸';
    ExcelApplication1.Cells.Item[1,6] := '下游岸';
    if not CheckBox1.Checked then
     ExcelApplication1.Cells.Item[1,8] := '空传感器';
    j := 1;
    i := 2;
    sa := 2;
    xa := 2;
    sj :=2;
    xj := 2;ADOQuery3.Close;
    ADOQuery3.Open;while not ADOQuery3.Eof do
    begin
        if ADOQuery3.FieldByName('qy').Value='下游江' then
        begin      ExcelApplication1.Cells.Item[xj,2].value := ADOQuery3.FieldByName('sl').Value;
          inc(xj);
        end
        else if ADOQuery3.FieldByName('qy').Value='上游江' then
        begin
          ExcelApplication1.Cells.Item[sj,3].value := ADOQuery3.FieldByName('sl').Value;
          inc(sj);
        end
        else if  ADOQuery3.FieldByName('qy').Value='上游岸' then
        begin
          ExcelApplication1.Cells.Item[sa,5].value := ADOQuery3.FieldByName('sl').Value;
          inc(sa);
        end
        else if  ADOQuery3.FieldByName('qy').Value='下游岸' then
        begin
          ExcelApplication1.Cells.Item[xa,6].value := ADOQuery3.FieldByName('sl').Value;
          inc(xa);
        end
        else begin
         if not CheckBox1.Checked then
         begin
           ExcelApplication1.Cells.Item[i,8].value := ADOQuery3.FieldByName('sl').Value;
           inc(i);
         end;
        end;
        ADOQuery3.Next;end;for i:=2 to 42 do
    begin
       ExcelApplication1.Cells.Item[i,1] := inttostr(i-2);
       ExcelApplication1.Cells.Item[i,4] := inttostr(i-2);
    end;ExcelWorksheet1.SaveAs(ed_name.Text);ExcelWorkbook1.Close;
    ExcelApplication1.Quit;
    ExcelApplication1.Disconnect;
    showmessage('数据导出完毕');end;
      

  2.   

    procedure TForm1.Button10Click(Sender: TObject);
    var
    Temp_Worksheet: _WorkSheet;
    i,j,m ,sa,xa,sj,xj: integer;
    begin
    ExcelApplication1.Connect;
    ExcelApplication1.Visible[0] := false;
    if CheckBox1.Checked  then
    ExcelApplication1.Caption := '百分比数据'
    else
    ExcelApplication1.Caption := '索力数据数据';
    ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
    Temp_Worksheet:=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
    ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
    ExcelWorksheet1.Name := 'moumou';
    //数据录入代码ExcelWorksheet1.SaveAs(ed_name.Text);ExcelWorkbook1.Close;
    ExcelApplication1.Quit;
    ExcelApplication1.Disconnect;
    showmessage('数据导出完毕');
    这是精简之后的
      

  3.   

    是建sheet的问题 以前也遇到过
      

  4.   

    disconnect 不行呀, 提示自动对象没这个方法 的错误!我不是用delphi的excel控件。用 oleobject也有这个方法吗?楼上的遇到过,麻烦说下怎样解决的啊?
      

  5.   

    这样试试:
    ExcelApp:=unassigned;
      

  6.   

    我碰到过这个问题。就是这样解决的:
    WorkBook:=unassigned;
    ExcelApp:=unassigned;
      

  7.   

    去下在Jungle的EjunExcelRW类库吧,不需要Excel直接读写xls文件。 http://www.e-jun.com/bbs