我原来的代码如下:
        ExcelApp := CreateOleObject('Excel.Application');  
        ExcelApp.Visible := False ;
        ExcelApp.WorkBooks.Add;   
        ExcelApp.WorkBooks.Open(xlsFileName );             
        ExcelApp.WorkSheets[1].Activate;    
       然后判断该条记录是否已存在于Table中,若无则将Cell中的数据存入到Table 中
  Excel中的记录约有10000条,速度很慢,
不知有否更好的方案?

解决方案 »

  1.   

    ADOConnection 指向excel, 用Jet4.0 ,Extended properties设为Excel 8.0
    SELECT * into table  FROM Tab1 IN [ODBC]
    [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
      

  2.   

    下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
    INSERT INTO urtable
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')
      

  3.   

    SELECT * 
    FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="C:\temp\b.xls";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False')
      

  4.   

    今天刚写个这方面的程序段,贴出来,你做下修改
    //open excel
    procedure TForm1.ConnectClick(Sender: TObject);
    var
      str,path,xlsName:string;
    begin
    //connect excel
    path:=extractfilepath(application.exename);
    OpenDialog1.InitialDir :=path;
    OpenDialog1.Filter :='*.xls|*.xls';
    if OpenDialog1.Execute then
      xlsName :=extractfilename(OpenDialog1.FileName);str:='Provider=Microsoft.Jet.OLEDB.4.0;' +
         'Data Source= ' + path + xlsName + ';Extended Properties=Excel 8.0;' +
         'Persist Security Info=False';
    conn.Close;
    conn.ConnectionString :=str;
    try
      conn.Connected :=true;
      Adotable1.Close;
      Adotable1.TableDirect:=True ;
      adotable1.tablename:='sheet1$';
      tType.ItemIndex :=-1;
      try
        adotable1.Open;
        dbgrid1.Columns[0].Width :=50;
        dbgrid1.Columns[1].Width :=50;
        dbgrid1.Columns[2].Width :=50;
        dbgrid1.Columns[3].Width :=80;
        dbgrid1.Columns[4].Width :=80;
        dbgrid1.Columns[5].Width :=200;
      except
        showmessage('Open Error');
      end;
    except
      self.Caption :='Excel connect error';
      exit;
    end;end;//导入,我使用批处理,adoquery1.locktype->ltBatchOptimistic
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from tablename where 0=1');
    ADOQuery1.Open;ADOTable1.First;
    while not ADOTable1.Eof do
      begin
        ADOQuery1.Append;
        ADOQuery1.FieldByName('xx').AsString :=trim(Adotable1.fieldbyname('yy').AsString );
        //和上句相同,相应字段数据导入即可
        ADOQuery1.Post;
        ADOTable1.Next;
      end;
    ADOQuery1.UpdateBatch();
    showmessage('over');
      

  5.   

    我用adoquery做过,1000条记录3*秒可以吗
      

  6.   

    速度最快的办法:
    在SQL Server中做一个DTS导入包
    然后在程序中运行之