我有个程序需要从excel中导数据到程序里的一个dbgrid里按顺序调用。
现在不知道怎么下手,请各位哥哥指点一下迷经,谢谢了。

解决方案 »

  1.   

    用ado可以存取excel表,使用Microsoft Jet 4.0 OLE DB Provide,并且将数据链接属性
    (data link properties)的所有页(第四页)的Extended Properties属性设为EXCEL 8.0.
    这样存取excel表就与数据库表一样了
      

  2.   

    DataSet.SQL.Clear;
    sqlStr := 'SELECT * into #dcb_TempMend FROM OpenDataSource(' + #39 + 'Microsoft.Jet.OLEDB.4.0'+
    #39 +','+ #39 + 'Data Source=' + filePath + filename + ';User ID=Admin;Password=;'+
    'Extended properties=Excel 8.0' + #39 + ')...' + copy(filename,1,pos('.',filename)-1) + '$' ;
    DataSet.SQL.Add(sqlStr);
      

  3.   

    我的最简单
    用ADOQuery
    ADOQuery1->ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};DBQ="+OpenDialog1->FileName;
    ADOQuery1->SQL->Text = "Select * from  [Sheet1$]";
    ADOQuery1->Open();
    然后就可以随便用了
      

  4.   

    一行行的读,然后导到表里,方法较笨:)type
           PA = ^TPASN2_NEW;
           TPA = record
            A: String;
            B: String;
         end;          procedure TForm1.loadExcel(fileName: String);
         var FA: PA;
         begin
          //读Excel文件
          ExcelApplication1.Visible[0]:=false;
          Excelapplication1.Workbooks.Open(OpenDialog1.FileName,null,null,null,null,null,null,null,null,null,null,null,null,0);
          WorkBk  := ExcelApplication1.WorkBooks.Item[1];
          WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
          WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
          X := Excelapplication1.ActiveCell.Row;
          Y := Excelapplication1.ActiveCell.Column;
          RangeMatrix := Excelapplication1.Range['A1',Excelapplication1.Cells.Item[X,Y]].Value;
          //按行进行循环
          for iRE:=2 to X-2 do
          begin
            New(FA);  //此处我创建了一个结构体指针用来存取信息
            FA^.A := Trim(RangeMatrix[iRE+2,2]);
            FA^.B := Trim(RangeMatrix[iRE+2,2]);
    //进行数据存入数据库
    with Query1 do
    begin
      Close;
      sql.text := 'insert into table1 (a,b) values(:a,:b)';
      Parameters.ParamByName('a').value := FA^.A;
      Parameters.ParamByName('b').value := FA^.B;
      ExecSql;
    end;
          end;
         end;