很简单的一个测试程序,用来做从EXCEL导入数据到MS SQL SERVER
因为要做字段对应,所以一个一个数据提取,最后POST
运行到最下面那行就出错,而且有.TEXT,和没有.TEXT 都出现相同的错误
     adotable1.Close;
     adotable1.Fields.Clear;
     adotable1.TableName := 'tbl_temptemp';
     adotable1.Open;
     adotable1.Edit;
     progressbar1.Position := 10;     try
           excel :=createoleobject('excel.application');
     except
           progressbar1.Position := 0;
           
           excel.application.quit;           adotable1.Close;
     end;     excel.displayalerts :=false;
     excel.workbooks.open('D:\kyms\测试060702\10行2.xls',,,);     progressbar1.Position := 20;     adotable1.Append;     //Str(excel.workbooks[s1].worksheets[1].cells.item[2,2],tempstr);
     //tempstr := excel.workbooks[s1].worksheets[1].cells.item[2,3];
     tempstr := excel.workbooks[s1].worksheets[1].cells.item[2,3].text;

解决方案 »

  1.   

    excel.workbooks[s1].worksheets[1].cells.(2,3)
      

  2.   

    这样速度很慢的说...直接用ADOConnection + ADOQuery来读取Excel,然后根据你SQL Server的要求,转换成相应的格式导入,这样应该会快很多.
        FADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' +
                   'Data Source=' + FTargetXlsFileName + ';Mode=Share Deny None;Extended Properties="Excel 8.0;IMEX=1";' +
                   'Persist Security Info=False;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";';
        FADOConnection.Open;
        FADOQuery.SQL.Text := 'SELECT * FROM [' + FTabSheetName + '$]';然后利用
      ADOQuery.First;
        While not ADOQuery.Eof do begin
        //.......
        ADOQuery.Next;
      emd;
      

  3.   

    这样是可以的:
            Excelid := Null;
            try
                    Excelid:=CreateOleObject( 'Excel.Application' );
            except
                    on Exception do raise exception.Create('无法创建Xls文件,请确认是否安装EXCEL');
            end;        Excelid.Visible := True;
            Excelid.workbooks.open('D:\test.xls',,,);
            showmessage( Excelid.WorkSheets[1].Cells[1,1].Text);