有那位高手用过,复制、粘贴的方法从Excel中复制记录到adodataset1,或者到dbgrid1中,它是一样录入数据记录的方法!或者另外提供一种从Excel快速录入记录数据的方法!验证后,可用!定当以全额分值相赠!决不食言!

解决方案 »

  1.   

    可以考虑把从Excel文件读入到adodataset1中
    这样写连接字符串:
    Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=e:\temp\book2.xls;Extended Properties='Excel 8.0;HDR=Yes'
      

  2.   

    可用ado连接excel
    或者
    创建ole对象来操作excel至于你说的Grid问题,
    模拟输入即可手动触发所有的事件,导入简单校验难!
      

  3.   

    这不难吧,从excel复制出来数据,操作剪贴板,用tstringlist存起来,每一行的字段都以tab分隔,你只要逐行将数据append到adodataset就可以了。
      

  4.   

    读取剪切板的代码自己写吧procedure TForm1.Button1Click(Sender: TObject);
    var
        i,j : Integer;
        slst : TStringList;
        s : string;
    begin
        //---------------------------------------------
        //打开Excel,读取指定单元格内容,并复制到剪切版
        //---------------------------------------------
        ExcelApplication1.Connect;
        ExcelApplication1.Workbooks.Open('E:\aaa.xls',
          EmptyParam,EmptyParam,EmptyParam,EmptyParam,
          EmptyParam,EmptyParam,EmptyParam,EmptyParam,
          EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);    ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
        ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);    slst := TStringList.Create;
        try
          for i:=1 to 3 do
          begin
            s := '';
            for j:=1 to 3 do
            begin
                s := s+VarToStr(ExcelWorksheet1.Cells.Item[i,j]) +#9;
            end;
            slst.Add(s);
          end;      Clipboard.AsText := Copy(slst.Text,1,Length(slst.Text)-3);//去掉多余的3个字符
        finally
          ExcelApplication1.Quit;
          ExcelApplication1.Disconnect;
          slst.Free;
        end;
    end;
      

  5.   

    tO  :sdzeng(大头鸟)和zaza_bbface(我试着成熟一点)
       复制到剪贴板的方法,我们可以直接打开数据所在的excel文件,直接对其操作,复制数据到剪贴板上,而不用写程序的,这样好方便。
      余下的问题是:怎么把刚刚复制到剪贴板的数据写入到adodataset1或者dbgrid1中,这是问题的关键!请高手赐教!一定散分!
      

  6.   

    参考如下代码uses Clipbrd;procedure TForm1.Button1Click(Sender: TObject);
    var
      I, J: Integer;
      K: Integer;
      S: string;
    begin
      if not Assigned(DBGrid1.DataSource) then Exit;
      if not Assigned(DBGrid1.DataSource.DataSet) then Exit;
      if not DBGrid1.DataSource.DataSet.Active then Exit;
      if not DBGrid1.DataSource.DataSet.CanModify then Exit;
      with TStringList.Create do try
        Text := Clipboard.AsText;
        if Text = '' then Exit;
        for I := 0 to Count - 1 do
        begin
          S := Strings[I] + #9;
          DBGrid1.DataSource.DataSet.Append;
          K := Pos(#9, S);
          for J := 0 to DBGrid1.Columns.Count - 1 do
          begin
            if not Assigned(DBGrid1.Columns[J].Field) then Continue;
            if S = '' then Break;
            DBGrid1.Columns[J].Field.Value := Copy(S, 1, K - 1);
            System.Delete(S, 1, K);
          end;
          DBGrid1.DataSource.DataSet.Post;
        end;
      finally
        Free;
      end;
    end;
      

  7.   

    to :everyone 
      上面的方法我都测试了一下,很好!先谢谢各位高手了!请问还有其他的方法吗?
      于星期六结帖!请高手再乘机说两句!可以吗?谢谢