标题:使用 VFP 读取 excel 的信息采集表各项内容
取消只看楼主
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用wengjl在2014-7-31 08:47:57的发言:

传部分数据上来,我帮你做一个。现在中考做完,有一点儿时间



对了,wengjl老师您好,如果上面格式的表格不好读取的话,是否改成这样的格式更方便读取excel数据?


2014-07-31 10:16
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用sdta在2014-7-31 13:44:40的发言:

Eole=CREATEOBJECT('Excel.Application')
Local Axx[24]
With Eole
    For lnI=1 To Adir(Axls,"*.Xls")
        .Workbooks.Open(Sys(5)+Sys(2003)+"\"+Axls[lnI,1])
        Axx[1]=Transform(.Range("B1").Text) && 个人编号
        Axx[2]=Alltrim(.Range("B2").Text) && 姓名
        Axx[3]=Alltrim(.Range("D2").Text) && 性别
        Axx[4]=Ctod(Transform(Transform(.Range("F2").Text),"@R 9999-99-99")) && 出生日期
        Axx[5]=Alltrim(.Range("H2").Text) && 民族
        Axx[6]=Alltrim(.Range("B3").Text) && 籍贯
        Axx[7]=Alltrim(.RANGE("G3").Text) && 出生地
        Axx[8]=Alltrim(.Range("B4").Text) && 常住地址
        Axx[9]=Transform(.Range("G4").Text) && 邮编
        Axx[10]=Alltrim(.Range("B5").Text) && 工作单位
        Axx[11]=Transform(.Range("B6").Text) && 办公电话
        Axx[12]=Transform(.Range("E6").Text) && 移动电话
        Axx[13]=Ctod(Transform(Transform(.Range("B7").Text),"@R 9999-99-99")) && 参加工作时间
        Axx[14]=Ctod(Transform(Transform(.Range("D7").Text),"@R 9999-99-99")) && 入党时间
        Axx[15]=Alltrim(.Range("F7").Text) && 身份证号码
        Axx[16]=Alltrim(.Range("C8").Text) && 全日制学历
        Axx[17]=Alltrim(.Range("F8").Text) && 毕业院校及专业   
        Axx[18]=Alltrim(.Range("C9").Text) && 在职教育
        Axx[19]=Alltrim(.Range("F9").Text) && 在职教育毕业院校及专业   
        Axx[20]=Alltrim(.Range("B10").Text) && 现任职务
        Axx[21]=Alltrim(.Range("D10").Text) && 技术职务
        Axx[22]=Alltrim(.Range("I10").Text) && 熟悉何种技术有何专长        
        Axx[23]=Alltrim(.Range("B12").Text) && 奖惩情况
        Axx[24]=Alltrim(.Range("B13").Text) && 年度考核情况
        Insert Into 个人信息数据库表 From Array Axx
    Endfor
    .quit
Endwith
RELEASE Eole
Browse
Use In 个人信息数据库表
* 建议:将表中 奖惩情况及年度考核 字段的数据类型改为备注型




非常感谢sdta老师的解答!!我会好好研究的!
是的,我也感觉备注型才正确,不过我看数据量不大,就先用字符型了。
非常感谢!
2014-07-31 15:14
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用wengjl在2014-7-31 14:45:31的发言:



是8.0做的,把8.0的5个动态DLL文件下载来,放任一目录均可使用。

E表的格式不变就是可用的




谢谢wengjl老师!这正是我预想的功能,有了这个功能,相信工作起来更加方便了!!
我会好好研究您的代码的!!非常感谢!
2014-07-31 15:32
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用TonyDeng在2014-7-31 12:51:00的发言:



有些人的真实出生日期不是身份证上的,看要那日期怎么用了。



是的,这个时很头疼的问题,档案出生日期和身份证出生日期相差几年的都有。。。
2014-07-31 15:37
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用wengjl在2014-8-1 15:25:29的发言:


楼主好,昨天的工具改进了一下,你只要把所有的“个人信息采集表…….xls”放在同一目录中,可以一次性完成导入。

然后,你可以根据需要另行处理了……



谢谢wengjl老师,我正在看您的工具和代码,改进后的功能太棒了,这个工具真的很实用!相信这个工具能帮助到更多需要的人!非常感谢!!
2014-08-01 16:50
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用wengjl在2014-8-4 08:59:03的发言:

当一段代码只用一次,一般是硬编解决来得快。
当一段代码可用多次,遇变改几次后自然相着要提高适应性了————这是走向软编的推动力————火候不到位想软编也不行————所谓功到自然成哦



学习了!我更加要努力跟上了!
2014-08-04 16:01
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用sdta在2014-8-4 00:42:04的发言:


你的意思我明白,对于楼主这样水平的选手,只有用前面代码的方法,否则,他就看不懂了。


是的,这样的代码,比较容易弄懂!很直观,也感谢大家的热心指导!
2014-08-04 16:02
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用TonyDeng在2014-8-4 00:01:05的发言:

代码我就不发了,以前那个也只是类似的思想,不是具体当前问题的解决代码,找到也没什么用。解释一下思路即可:在Excel的另一个Sheet中,或者在外部另建一个文件(文本、xml、数据表等等形式均可),记录需要读取的数据的标题文字、灌入数据库的字段名(这样两个分离是为了适应字段名和文字不一致的情形)、数据在Excel.Sheet中的位置、数据类型、(必要时)转换公式之类用得着的东西,按图索骥提取数据,注入数据库,这是用循环做的,代码中不出现具体的字段名称和文字信息,就不是死代码,不管设计的Excel表格式如何变化、如何增减字段,都不需要修改源程序——事实上,我之前发的那个是根据Excel中的信息自动创建数据表的。

你要记住:你的表格不可能一成不变,而诸多细微的变化(尤其是字段文字被改动)是很难避免的,你的程序要有足够的适应能力,就绝对要避免硬编码,把字段名称和位置的具体值嵌入到源代码中,是编程大戒。可惜很多人喜欢这样写,因为不用动脑筋,又无比地勤快,不惜花精力敲入和修改硬数据——不企图一劳永逸的程序员不可能是好程序员。

如果有洁癖,看到、或写到前面那种十多数十个字段一行一行对应的代码,就应该想办法了!



这段话先收藏起来!希望以后能有能力看懂这段话!!
2014-08-04 16:05
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用sdta在2014-8-4 01:33:08的发言:

Close Databases
Use Grxx && 表结构 字段内容 C(10) 类型 C(1) 位置 C(4)
Local Axx[Reccount()]
Eole=CREATEOBJECT('Excel.Application')
With Eole
    For lnI=1 To Adir(Axls,"*.Xls")
        .Workbooks.Open(Sys(5)+Sys(2003)+"\"+Axls[lnI,1])
        Select Grxx
        Scan
            Do Case
               Case Inlist(Alltrim(类型),"C","M")
                    Axx[Recno()]=Alltrim(.Range(位置).Text)
               Case Alltrim(类型)=="D"
                    Axx[Recno()]=Ctod(Transform(.Range(位置).Text,"@R 9999-99-99"))
               Case Alltrim(类型)=="N"
                    Axx[Recno()]=Val(.Range(位置).Text)
            Endcase
        Endscan
        Insert Into 个人信息数据库表 From Array Axx
    Endfor
    .quit
Endwith
RELEASE Eole
Select 个人信息数据库表
Browse
Use In 个人信息数据库表
Use In Grxx




恩恩,使用这样的代码的话,如有变动,只需要修改对应的对照字典,而不用重新修改编译程序!谢谢sdta老师!良好的编程习惯能大大提高效率!
2014-08-04 16:18
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
得分:0 
以下是引用啸凡在2014-8-14 10:19:50的发言:

网上见过一个vfp全面控制excel的例子,请楼主自行查找一下。



好的!正在初步学习!
2014-08-15 15:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434552-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.155679 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved