请问,如何设计delphi程序时,要求选中一个EXCEL文件,将EXCEL中的数据导入到ACCESS或SQL   SERVER   2000数据库中,系统中已经存在一个数据表并有数据,导入的数据只是其中表的几个数据(在原来的数据基础上增减)例如:姓名 年龄 出生日期  工资 。。现在要execl中的数据包括 姓名 工资 
目的是改变工资数据!!

解决方案 »

  1.   

    我想你的问题是如何操作xls并从中取得数据吧?给你写一个简单的范例,希望对你有所帮助:var
      xlsFile: String;
      xlsApp, Sheet: OleVariant;
    begin
      Result := '';
      try
        xlsFile := 'c:\file1.xls';
        xlsApp := CreateOleObject('Excel.Application'); //需要引用 ComObj 单元
        try
          //打开xls文件
          xlsApp.WorkBooks.Open(xlsFile);
          Sheet := xlsApp.Sheets[1];
          try
            //光标归位到Excel档第一页第一格
            if xlsApp.ActiveSheet.Index <> Sheet.Index then
              Sheet.Select;
            Sheet.Cells.Item[1,1].Select;
            //显示第3行第5列的数据,可参考此句用循环与判断取出xls中所有数据
            ShowMessage(VarToStr(Sheet.Cells.Item[3,5].Value));
          end;
        finally
          Sheet := unassigned;
          xlsApp.Quit;
          xlsApp := Unassigned;
        end;
      except
        ShowMessage('无法启动Excel程式,请检查!');
      end;
    end;
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
     a_cc: TStrings;
     ExcelApp: Variant;
    begin
     if OpenDialog1.Execute then begin
       {打开保存一次EXCEL文件,为何要保存一次呢?如果是其它程序用第三方控件导出的EXCEL文件,最好做此步,否则容发生错误}
        ExcelApp := CreateOleObject( 'Excel.Application' );
        ExcelApp.WorkBooks.Open(OpenDialog1.FileName);
        ExcelApp.ActiveWorkBook.Save;
        ExcelApp.Quit;
        varclear(ExcelApp);
        
       a_cc :=TStringList.Create;
        {ADOConn是数据库连接控件ADOConnection}
        ADOConn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + OpenDialog1.FileName + ';Extended Properties=excel 8.0;Persist Security Info=false';
        ADOConn.Connected := True;
        ADOConn.GetTableNames(a_cc);{将EXCEL文件中的表格名单赋值于a_cc变量}
        with adoquery2 begin
             Close;
             sql.text:='select * from ['+a_cc[0]+']';//得到EXCEL文件中的第一个表格的数据
              open;
          while not eof begin
          {adoquery1是操作ACCESS或SQL数据表的,XF_A是姓名   xf_b 是年龄 }
          adoquery1.Append;
          adoquery1.FieldByName('xf_a').AsString:=FieldValues['姓名'];
          adoquery1.FieldByName('xf_b').AsInteger:=strtoint(FieldValues['年龄']);
          ...
          adoquery1.post;  
          next;
          end;
          close;
        end;
         
       adoconn.Connected:=false;
       a_cc.Free;
       messagebox(handle,'数据处理完毕','提示',MB_OK+MB_ICONINFORMATION);
                     end;
    end;