从excel中读取数据,执行到‘while eclApp.Cells(i,1) <> '' do begin’的时候会出错,大家帮忙看看是什么问题?
程序如下:
procedure TfrmInputPJ.btnImportClick(Sender: TObject);
var
  i:Integer;
  eclApp,WorkBook,Sheet:Variant;
  xlsFileName:string;
begin
  if dlgImport.Execute then
    xlsFileName := dlgImport.FileName
  else
    Exit;  try
    eclApp := CreateOleObject('Excel.Application');
    WorkBook := CreateOleObject('Excel.Sheet');
  Except
    Application.MessageBox('您的电脑中可能未安装Microsoft Excel!','错误',0);
    Exit;
  end;  try
    i := 2;
    while eclApp.Cells(i,1) <> '' do begin
      adoTemp1.Append;
      adoTemp1.FieldByName('PJMC').AsString := eclApp.Cells(i,1);
      adoTemp1.FieldByName('PJDM').AsString := eclApp.Cells(i,2);
      adoTemp1.FieldByName('CX').AsString := eclApp.Cells(i,3);
      adoTemp1.FieldByName('CD').AsString := eclApp.Cells(i,4);
      adoTemp1.FieldByName('SL').AsString := eclApp.Cells(i,5);
      adoTemp1.FieldByName('DJ').AsString := eclApp.Cells(i,6);
      adoTemp1.Post;
      i := i + 1;
    end;    
  Except
    Application.MessageBox('导入失败!','错误',0);
    WorkBook.close;
    eclApp.Quit;
    eclApp:=Unassigned;
  end;

解决方案 »

  1.   

    对excel取值应该是 eclApp.Cell.Item[row,col]  吧?while eclApp.Cell.Item[i,1]  <> '' do begin 
          adoTemp1.Append; 
          adoTemp1.FieldByName('PJMC').AsString := eclApp.Cell.Item[i,1]; 
          adoTemp1.FieldByName('PJDM').AsString := eclApp.Cell.Item[i,2]; 
          adoTemp1.FieldByName('CX').AsString := eclApp.Cell.Item[i,3]; 
          adoTemp1.FieldByName('CD').AsString := eclApp.Cell.Item[i,4]; 
          adoTemp1.FieldByName('SL').AsString := eclApp.Cell.Item[i,5]; 
          adoTemp1.FieldByName('DJ').AsString := eclApp.Cell.Item[i,6]; 
          adoTemp1.Post; 
          i := i + 1; 
        end;     
    你试试看看行不行?
      

  2.   

    我上边写错eclApp.Cells.Item[row,col]对excel取值应该是 eclApp.Cells.Item[row,col]  吧? while eclApp.Cells.Item[i,1]   <> '' do begin  
          adoTemp1.Append;  
          adoTemp1.FieldByName('PJMC').AsString := eclApp.Cells.Item[i,1];  
          adoTemp1.FieldByName('PJDM').AsString := eclApp.Cells.Item[i,2];  
          adoTemp1.FieldByName('CX').AsString := eclApp.Cells.Item[i,3];  
          adoTemp1.FieldByName('CD').AsString := eclApp.Cells.Item[i,4];  
          adoTemp1.FieldByName('SL').AsString := eclApp.Cells.Item[i,5];  
          adoTemp1.FieldByName('DJ').AsString := eclApp.Cells.Item[i,6];  
          adoTemp1.Post;  
          i := i + 1;  
        end;      
    你再试试看看行不行?
      

  3.   

    还是失败,我测试了一下,在执行“while eclApp.Cells.Item[i,1]    <> '' do begin   ”这句的时候就出错了
      

  4.   

    如此这般:procedure TfrmInputPJ.btnImportClick(Sender: TObject); 
    var 
      i: Integer; 
      eclApp: Variant; 
      xlsFileName:string; 
    begin 
      if not dlgImport.Execute then exit;  xlsFileName := dlgImport.FileName;  try 
        eclApp := CreateOleObject('Excel.Application'); 
        eclApp.WorkBooks.Open(xlsFileName);
        eclApp.Visible:=False;
      Except 
        Application.MessageBox('您的电脑中可能未安装Microsoft Excel!','错误',0); 
        Exit; 
      end;   try 
        for i:=2 to eclApp.ActiveSheet.UsedRange.Rows.Count do
        begin
          adoTemp1.Append; 
          adoTemp1.FieldByName('PJMC').AsString := eclApp.Cells[i,1].Value; 
          adoTemp1.FieldByName('PJDM').AsString := eclApp.Cells[i,2].Value; 
          adoTemp1.FieldByName('CX').AsString := eclApp.Cells[i,3].Value; 
          adoTemp1.FieldByName('CD').AsString := eclApp.Cells[i,4].Value; 
          adoTemp1.FieldByName('SL').AsString := eclApp.Cells[i,5].Value; 
          adoTemp1.FieldByName('DJ').AsString := eclApp.Cells[i,6].Value; 
          adoTemp1.Post; 
        end;     
      Except 
        Application.MessageBox('导入失败!','错误',0);
      end; 
      eclApp.ActiveWorkBook.close;
      eclApp.Quit;
      eclApp:= Unassigned; 
    end;