本帖最后由 diyyh1004 于 2009-06-24 14:26:44 编辑

解决方案 »

  1.   

    操作excel沒多少經驗,個人認為:
    1.建立連接這個excel的odbc數據源
    2.在delphi用數據庫組件連接這個odbc數據源
    3.讀取excel數據,然後更新
      

  2.   

    1 首先要设置EXCEL的连接,我是使用ADO 连接EXCEL的,因为毕竟都是微软的东东,他们之间联系的应该比较好吧,呵呵呵
      a 取一个AdoConnection控件,属性ConnectionString设置为如下   Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\CaiWu\源数据\应收款项情况表\2004\应收款项情况表 
        _CASW_200405.xls;Extended Properties=Excel 8.0;Persist Security Info=False  Data Source就是你的EXCEL文件
      
      b 取一个AdoQuery 连接到你的AdoConnection控件.
        
      c 你就可以编写SQL来取数据了,就像这杯EXCEL 文件是普通的表一样。2 sql
      a excel 每个分页(Sheet),为一个数据表,例如你有个页名字为"资产负债表"
        Sql:= select * from [资产负债表$] where 3 你的要求
       a 档案号为编号的第6位数字开始的连续7个数字,并用短线隔开如下列所示;
          我也没看到你的例子在那里,凑活写一个。
          select  SubString(编号, 6, 7) as   from [SheetName$] where        
       b 档案级别:945~1044为0,845~944为2,以此类推..... 
         看不懂你要什么呢
    我只是给你说了怎么连接,具体的SQL,就要靠你自己了,你写的也太含糊了
      

  3.   

    uses StrUtils;// 传入Source源字符串,输入dah, jb为档案号和级别
    procedure GetDAStr(Source: string; var dah, jb: string);
    var
      tmpDah: string;
      tmpjb: integer;
    begin
      dah := '';
      // 取第6个开始的7个字符
      tmpDah := Copy(Source, 6, 7);
      // 前三个
      dah := leftStr(tmpDah, 3) + '-';
      // 中间两个
      dah := dah + Copy(tmpDah, 4, 2) + '-';
      // 最后两个
      dah := dah + rightStr(tmpDah, 2);  // 前三个转换成整形好计算
      tmpjb := StrToIntDef(leftstr(tmpDah, 3), 0);
      // 小于100即为 1000 - 1044的情况为0
      if tmpjb < 100 then
        tmpjb := 0
      else
        tmpjb := 10 - Round((tmpjb + 5.1) / 100) ; //tmpjb + 5.1,则最小的情况如845会变成850.1,除100再四舍五入为9,10-9为1
      jb := IntToStr(tmpjb);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      dah, jb: string;
    begin
      GetDAStr('1556494565321651', dah, jb);
      Caption := dah + '   ' + jb;
    end;
      

  4.   

    给你个思路,
    把excel表中的数据全部导进一个表(中间表)中。再对这个表进行处理。
      

  5.   

    非常感谢楼上各位大侠的帮助。
    我用wintergoes(多来米饭少来稀) 的方法,得到的结果为:945-65-32 5。
    可是我要把‘945-65-32’和‘5’提取出来,并分别写入到‘ 档案号’和‘档案级别’字段内,再一次请问应该如何做到啊?原来的表示这样:
              编号                性别    婚否      档案号    档案级别 
    1556494565321651        男        是 
    1556484565321651        男        是 
    1556474565321651        女        否 
    1556474565321651        女        是 
    我要实现这样的结果:
          编号                    性别    婚否        档案号            档案级别 
    1556494565321651        男        是        945-65-32              0 
    1556484565321651        男        是        845-65-32              1 
    1556474565321651        女        否        745-65-32              2 
    1556474565321651        女        是        745-65-32              2
      

  6.   

    谢谢楼上各位高手的热心帮助,问题已经得到解决。 
     xjwy (程序春秋)的方法详细说明了数据接入的问题,wintergoes (多来米饭少来稀)的代码给了我一个思路。 我在此非常感谢。
    这几天我整优秀党员材料来交去了,所以晚了些结贴,不好意思了。 有你们的帮助,我没有理由停滞不前。我要向你们学习,以后我能帮助人的时候,一定热心去帮助人的。