有沒有最佳方法.謝謝.

解决方案 »

  1.   

    不用sqlserver,這種方法很不好,
    而且我表中的字段和客戶提供的有出入.
    哎,誰來救救我,兩年的工資表要我導進去啊!!!
      

  2.   

    可以,例:
    如何在DELPHI中操作EXCEL电子表格 EXCEL电子表格作为办公软件OFFICE中的重要组成部份,是日常办公系统的主要助手,因此许多日常所需的业务方面的数据通常是通过电子表格存取。有时我们需要从日常工作中创建的EXCEL中取得数据进行操作、打印、查询,统计等工作。在这里我将介绍如何利用delphi完成EXCEL电子表格中数据的操作。一、 新建一项目,从控件栏servers中分别选取控件:excelapplication、excelworkbook1、excelworksheet,放到主窗体from1中,并加入stringgrid、三个按钮、五个显示字段内容的EDIT、二个操作显示记录的label、一个用于打开EXCEL电子表格的控件opendialog等,如下图所示:
     
    二、选择excel表'按钮,用于打开EXCEL文件,其代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var i,j:integer;
    begin
    opendialog1.InitialDir:=ExtractFileDir(paramstr(0));//文件的打存放初始路径
    opendialog1.Execute;
    Try
    ExcelApplication1.Connect;//EXCEL应用程序
    Except
    MessageDlg('Excel may not be installed',mtError, [mbOk], 0);
    Abort;
    End;
    ExcelApplication1.Visible[0]:=True;
    ExcelApplication1.Caption:='Excel Application';
    try 
    excelapplication1.Workbooks.Open(opendialog1.FileName,
    null,null,null,null,null,null,null,null,null,null,null,null,0);//打开指定的EXCEL 文件
    except
    begin
    ExcelApplication1.Disconnect;//出现异常情况时关闭
    ExcelApplication1.Quit;showmessage('请选择EXCEL电子表格!');
    exit;
    end;
    end;
    ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);//ExcelWorkbook1与Eexcelapplication1建立连接
    ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);//Excelworksheet1与Excelworkbook1建立连接 
    //开始从EXCEL中取数,放到stringgrid1中,取完数后关闭EXCEL
    for i:=1 to 1000 do//最大取值1000
    for j:=1 to 6 do
    begin
    if trim(excelworksheet1.cells.item[i+1,1])<>'' then
    begin
    stringgrid1.rowCount:=i+1;
    stringgrid1.Cells[j,i]:=ExcelWorksheet1.Cells.Item[i+1,j];
    end
    else
    begin
    label3.caption:=inttostr(i-1);
    ExcelApplication1.Disconnect;
    ExcelApplication1.Quit;
    //将第一条数据赋给编辑框
    edit2.text:=stringgrid1.Cells[1,1];
    edit1.text:=stringgrid1.Cells[2,1];
    edit3.text:=stringgrid1.Cells[3,1];
    edit4.text:=stringgrid1.Cells[4,1];
    edit5.text:=stringgrid1.Cells[5,1];
    exit;
    end;
    end;
    end;
    
    三、'下一条记录'按钮,完成记录向下移动,代码如下:
    procedure TForm1.Button2Click(Sender: TObject);
    var x:integer;
    begin
    x:=stringgrid1.row+1;
    if x<> stringgrid1.RowCount then
    begin
    stringgrid1.row:=stringgrid1.row+1;
    label1.caption:=inttostr(x);
    edit2.text:=stringgrid1.Cells[1,x];
    edit1.text:=stringgrid1.Cells[2,x];
    edit3.text:=stringgrid1.Cells[3,x];
    edit4.text:=stringgrid1.Cells[4,x];
    edit5.text:=stringgrid1.Cells[5,x];
    exit;
    end
    else
    showmessage('已到第一条记录!');
    end;四、'上一条记录',完成记录上移,代码如下:
    var x:integer;
    begin
    x:=stringgrid1.row-1;
    if x<>0 then
    begin
    stringgrid1.row:=stringgrid1.row-1;
    label1.caption:=inttostr(x);
    edit2.text:=stringgrid1.Cells[1,x];
    edit1.text:=stringgrid1.Cells[2,x];
    edit3.text:=stringgrid1.Cells[3,x];
    edit4.text:=stringgrid1.Cells[4,x];
    edit5.text:=stringgrid1.Cells[5,x];
    exit;
    end
    else
    showmessage('已到最后一条记录!');
    end;
    五、stringgrid中上下移动时代码:
    procedure TForm1.StringGrid1Click(Sender: TObject);
    var i:integer;
    begin
    i:=stringgrid1.Row;
    label1.caption:=inttostr(i);
    edit1.text:=stringgrid1.Cells[2,i];
    edit2.text:=stringgrid1.Cells[1,i];
    edit3.text:=stringgrid1.Cells[3,i];
    edit4.text:=stringgrid1.Cells[4,i];
    edit5.text:=stringgrid1.Cells[5,i];
    end;
    六、运行程序,点击按钮1打开excel表格。程序将启动EXCEL,并打开了选择的电子表格,这时请不要关闭EXCEL,当程序从EXCEL取数完毕将自动关闭EXCEL程序,应用程序取出了EXCEL数据,显示在stringgrid中,并将第一笔数据各字段的值赋给了左边的对应的edit字段。点击按钮2、按钮3可以查看下一条或上一条记录。也可以使用光标在stringgrid1上移动。
    同时我们也可以对stringgrid中的记录进行查询、定位。相反,也可以将数据库中的数据输入到EXCEL中。 总之,只要我们从EXCEL提取出数据,并保存到stringgrid中,我们就可以进行相应操作,如统计、查询、重新输出,使平进的EXCEL电子表格中的数据在应用程序中得到利用。
      

  3.   

    謝謝你,樓上的老大,到dbgrid上行嗎?
      

  4.   

    for i:=1 to 1000 do//最大取值1000
    for j:=1 to 6 do
    //這里i,j各代表什么?
    高手啊!!!
      

  5.   

    如果只是临时使用的话,用sql server的数据倒入功能再好不过了。
    倒入的时候可以指定那些列倒入到哪些中,列名不同没关系。如果不行,可以倒入的时候,让数据库自动建立表,等数据倒入完成再用sql语句进行处理,想要怎么处理都可以。
      

  6.   

    我剛開始也是用sql server直接導入的功能.但是有很多不對的地方.
    看今天有哪位大俠能幫幫我.
      

  7.   

    用delphi操纵excel就象操纵普通的数据库库一样方便。参考帖子:
    http://expert.csdn.net/Expert/topic/1163/1163274.xml?temp=.5594141
      

  8.   

    要用DELPHI中的ADO系列控件访问Excel数据文件,首先应该建立一些基本概念。你需要将一个Excel数据文件想象为一个关系数据库,Excel文件中的每个工作表就对应该数据库中的一个表,而工作表中的每一列当然就是表的列了。然后,按照下列面的秘诀进行就可以。    1.设置ADOConnection的ConnectionString    构造ConnectionString时,OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider作为ADO的驱动程序。这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件。    连接的数据库名称当然就是你要打开的Excel文件,注意扩展名是*.xls,而不是*.mdb。    最关键的一点是,还要设置扩展属性Extended Properties为“Excel 8.0”,否则,测试连接时会报告无法识别数据格式的错误。Extended Properties的属性值在“所有”参数页中输入。    最后,设置完成后的ConnectionString中的各项参数为:    Provider=Microsoft.Jet.OLEDB.4.0    Data Source=MyExcelFile.xls    Extended Properties=Excel 8.0    Persist Security Info=False
      

  9.   

    SQL直接导入,有时候会有数据导不进去。
    我是把EXCEL另存为CSV文件,
    然后在DELPHI中手工读取的。