用Delphi导出数据到Excel时报OLE error 800A03EC错误.
已导出的数据是260行,卡住!
请问是什么原因啊???

解决方案 »

  1.   

     if (not DM.QryCE_Size.Active)and (not DM.QryCE_Thickness.Active)and (not DM.QryCE_Online.Active)
         and (not DM.QryCE_Exterior_Sample.Active) then
      begin
        Application.MessageBox('对不起,没有CE保留品数据可以导出!','提示',MB_OK+ MB_ICONEXCLAMATION);
        Exit;
      end;  if Application.MessageBox('确认要导出CE保留品明细数据吗?','提示',MB_YESNO+mb_iconquestion)=IDNo then  Exit;
      try
        ExcelApp:=CreateOleObject('Excel.Application');
      except
        Application.MessageBox('创建Excel文件时出现错误!','提示',MB_OK+ MB_ICONEXCLAMATION);
        Exit;
      end;
      ExcelApp.Visible := True;
      ExcelApp.Caption := '标题:CE检查保留品数据';
      ExcelApp.WorkBooks.Add;
      ExcelApp.WorkSheets[1].Activate;
      ExcelApp.WorkSheets[1].name:='表名';
      ExcelApp.ActiveSheet.Rows[1].Font.Bold:= True;
      //to excel 导出数据
      begin  
       with DM.QryCE_Reservations do
        begin
          DisableControls;
          fieldNum := dbgrid9.fieldCount;
          ExcelApp.Cells[1,1] :='CE保留品推移数据表';
          FieldNum:=FieldNum;
          for i:=1 to fieldNum do //写表头
          begin
            ExcelApp.Cells[2,i]:=FrmCE_Report.DBGrid9.Columns[i-1].Title.caption;
          end;
          first;
          i:=2;
          while not eof do
          begin
          for j:=1 to fieldNum do
          begin
            ExcelApp.Cells[line+1+i,j]:=fields[j-1].AsString;
          end;
          inc(i);
          if (i mod 20)=0 then
            ExcelApp.Cells[1,20].Activate;
            next;
          end;
          line:=i+2;
        end;  
        
         with DM.QryCE_Reservation do
        begin
          fieldNum := dbgrid7.fieldCount;
          ExcelApp.Cells[1+line,1] :='CE保留品处理数据表';
          FieldNum:=FieldNum;
          for i:=1 to fieldNum do //写表头
          begin
            ExcelApp.Cells[line+2,i]:=FrmCE_Report.DBGrid7.Columns[i-1].Title.caption;
          end;
          first;
          i:=2;
          while not eof do
          begin
          for j:=1 to fieldNum do
          begin
            ExcelApp.Cells[line+i+1,j]:=fields[j-1].AsString;
          end;
          inc(i);
          if (i mod 20)=0 then
            ExcelApp.Cells[1,20].Activate;
            next;
          end;
          line:=line+i+2;
        end;     with DM.QryCE_Reserve_Yield do
        begin
          fieldNum := dbgrid8.fieldCount;
          ExcelApp.Cells[line+1,1] :='CE保留品月良率数据表';
          FieldNum:=FieldNum;
          for i:=1 to fieldNum do //写表头
          begin
            ExcelApp.Cells[line+2,i]:=FrmCE_Report.DBGrid8.Columns[i-1].Title.caption;
          end;
          first;
          i:=2;
          while not eof do
          begin
          for j:=1 to fieldNum do
          begin
            ExcelApp.Cells[line+i+1,j]:=fields[j-1].AsString;
          end;
          inc(i);
          if (i mod line+20)=0 then
            ExcelApp.Cells[1,i+20].Activate;
            next;
          end;
          EnableControls;
        end;
         ExcelApp.Columns[1].NumberFormatLocal:='@';
        Application.MessageBox('恭喜!' + #13#10#13#10 +
        '数据成功导出,请注意数据备份。', '提示', MB_OK + MB_ICONINFORMATION +MB_DEFBUTTON2);
      end;
      

  2.   

    对excel单元格赋值,值为公式,类似 =SUM(A4:J5)
    由于没有判断列超出Z,导致出现 =SUM([3:]4)的公式,Z的ASC码值为90,[ 的asc码值为91
    就会出现OLE error 800A03EC  的错误提示
    估计此错误提示多数是对单元格赋值或赋表达式不正确导致的,或超出excel可识别值的范围 看看你的数据有没有什么不一样的
      

  3.   

    这些位置,加入 exception 处理,最少不会出错,而出错后,希望你自己可以通过 message 的提示,找到原因
    ...
    try
        ExcelApp.Cells[2,i]:=FrmCE_Report.DBGrid9.Columns[i-1].Title.caption;
    except
        on Exception E do
        begin
          ShowMessage( E.Message );
        end;
    end;
    ......
    try
       ExcelApp.Cells[line+2,i]:=FrmCE_Report.DBGrid7.Columns[i-1].Title.caption;
    except
     on Exception E do
        begin
          ShowMessage( E.Message );
        end;
    end;
    ...
      

  4.   

    小女子?
    建议xml封包直接成excel 2007格式的,电脑不装office都压力不大。
      

  5.   

    我没有太详细看你的代码啊,但是提醒你一下,看看是不是这个问题:EXCEL2003以下的表格中列最多为256列,我估计是你的CELL[I,J]中的I超过了256,所以出错了,你检查或者跟踪一下I值吧
      

  6.   

    excel 的列最多到IV,好像是255列,
    行最多是65535
      

  7.   

    自己已经搞定啦,还是得多谢各位!
    是ExcelApp.Cells[1,i+20].Activate;这句话错了
    行列对调了