求用Delphi编码实现从Excel导入到数据表中(不限数据库)的程序,最好能直接读取Excel文件。

解决方案 »

  1.   

    Insert into tmptable (记录编号,事件号) SELECT 记录编号,事件号 FROM 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
      

  2.   

    procedure TFrmImportExcel.FlatButton5Click(Sender: TObject);
    var
      i,j,DoubleCount,Ord_Qty : integer;
      EParam,DocuType : OleVariant;
      wkbk : _WorkBook;
      sqlstr :string;
      ExeHandle:Thandle;
    begin
      opendialog1.InitialDir:=ExtractFileDir(paramstr(0));
      //文件打开的初始路径
      if opendialog1.Execute then
      begin  Try
        ExcelApplication1.Connect;
      Except
        msshow('Excel文件打开失败!');
        Exit;
      End;  ExcelApplication1.Visible[0]:=False;
      ExcelApplication1.Caption:='Excel数据文件';  EParam:=EmptyParam;
      DocuType:=0;
      try
        wkBk:=ExcelApplication1.Workbooks.Add(EParam, DocuType);    wkBk:=ExcelApplication1.WorkBooks.Open(opendialog1.FileName,EmptyParam,EmptyParam,
          EmptyParam,EmptyParam,EmptyParam,EmptyParam,
          EmptyParam,EmptyParam,
          EmptyParam,EmptyParam,DocuType,EmptyParam,DocuType);    ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);//ExcelWorkbook1与Eexcelapplication1建立连接
        ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);//Excelworksheet1与Excelworkbook1建立连接  except
        begin
          ExcelWorkbook1.Close;     //出现异常情况时关闭
          ExcelApplication1.Disconnect;
          ExcelApplication1.Quit;
          msshow('导入EXCEL数据表格失败!');
          exit;
        end;
      end;
      //开始从EXCEL中取数,放到stringgrid中,取完数后关闭EXCEL
      try
        for i:=11 to 50 do
        begin
          if trim(excelworksheet1.cells.item[i,1])<>'' then
            begin
              GroupD.Insert;
              GroupD.FieldByName('Item_No').AsInteger :=GroupD.RecordCount +1;
              GroupD.fieldbyname('Single_No').AsString  := GroupM.fieldbyname('Single_No').AsString;
              GroupD.FieldByName('ShipTicketNo').asstring :=GroupD.fieldbyname('Single_No').AsString+'-'+inttostr(GroupD.RecordCount+1);
              GroupD.FieldbyName('UserName').asstring :=UserName ;
              GroupD.FieldByName('Luggage').AsInteger :=0;
              GroupD.FieldByName('Weight').AsInteger :=0;
              GroupD.FieldByName('IsThrough').AsBoolean :=False  ;
              GroupD.FieldByName('ischk').AsBoolean :=False ;
              GroupD.FieldByName('IsLeave').AsBoolean :=False ;
              GroupD.FieldByName('E_Ticket').AsBoolean :=False ;
              GroupD.FieldByName('Cons').AsBoolean :=False ;
              GroupD.fieldbyname('OriDate').AsString  := GroupM.fieldbyname('OriDate').AsString;
              GroupD.fieldbyname('OriHB').AsString  := GroupM.fieldbyname('OriHB').AsString;
              GroupD.fieldbyname('Camer').AsString  := GroupM.fieldbyname('Camer').AsString;
              GroupD.fieldbyname('FlightNo').AsString  := GroupM.fieldbyname('FlightNo').AsString;
              GroupD.fieldbyname('Origin').AsString  := GroupM.fieldbyname('Origin').AsString;
              GroupD.fieldbyname('Dest').AsString  := GroupM.fieldbyname('Dest').AsString;
              GroupD.fieldbyname('Type').AsString  := GroupM.fieldbyname('Type').AsString;
              GroupD.fieldbyname('Ticket').AsString  := GroupM.fieldbyname('Ticket').AsString;
              GroupD.fieldbyname('U_Price').AsString  := GroupM.fieldbyname('U_Price').AsString;          GroupD.fieldbyname('SurName').value:=ExcelWorksheet1.Cells.Item[i,5];
              GroupD.FieldByName('GivenName').value :=ExcelWorksheet1.Cells.Item[i,6];
              GroupD.FieldByName('PassportNo').value :=ExcelWorksheet1.Cells.Item[i,7];
              GroupD.fieldbyname('DateOfBidh').value:=ExcelWorksheet1.Cells.Item[i,8];
              GroupD.FieldByName('Nationality').value :=ExcelWorksheet1.Cells.Item[i,9];
              GroupD.Post;
            end
        end;
      finally
        msshow('数据导入完毕!');
      end;  try
        ExcelWorkbook1.Close;
        ExcelApplication1.Disconnect;
        ExcelApplication1.Quit;
        EParam :=Unassigned;
        DocuType :=Unassigned;
      except  end;  EndProcess('excel.exe'); { 关闭进程:var
      H:THandle;
      P:DWORD;
    begin
      H:=FindWindow(pchar('IEFRAME'),nil); //查找窗体
      if H<>0 then
      begin
        GetWindowThreadProcessId(H,@P); //查找IE进程ID
        if P<>0 then
          TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF);  //关闭
       end;
    end;end. } 
    end;
    end;
      

  3.   

    //用JET引擎,使用下面语句
    INSERT INTO 新建表名 FROM 表名 IN "Excel文件名.xls" "Excel 8.0;"
      

  4.   

    //用JET引擎,使用下面语句
    INSERT INTO 新建表名 FROM 表名 IN "Excel文件名.xls" "Excel 8.0;"