| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7570 人关注过本帖, 11 人收藏
标题:使用 VFP 读取 excel 的信息采集表各项内容
只看楼主 加入收藏
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
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 
网上见过一个vfp全面控制excel的例子,请楼主自行查找一下。

两人行已有我师……
2014-08-14 10:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
啸凡:多年不见了,近来可好!这根黄瓜吃了不少年了吧

坚守VFP最后的阵地
2014-08-14 10:22
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 
呵呵,还活着。谢谢sdta您的挂念!水果嘛,常吃长有。哈哈

[ 本帖最后由 啸凡 于 2014-8-14 13:41 编辑 ]

两人行已有我师……
2014-08-14 13:37
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
活着9good
2014-08-14 14:26
vereesa
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-4-28
收藏
得分:0 
以下是引用啸凡在2014-8-14 10:19:50的发言:

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



好的!正在初步学习!
2014-08-15 15:13
zjgzgs
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-3-11
收藏
得分:0 
一气全部看完,令人深探,感受颇多,谢谢了
2014-08-29 00:02
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏(2)
得分:0 
好久没上来,一口气读完所有的贴子,深受启发。自己试着写了一段程序,但愿能对楼主有所帮助。
程序代码:
SET date TO ansi
SET CENTURY on
SET SAFETY OFF
myexcel=createobject('excel.application')        && 创建一个对象
myexcel.visible=.f.
bookexcel=myexcel.workbooks.open("f:\字段名对照表.xls")            && 打开指定文件
USE f:\stru1
ZAP
arr=bookExcel.ActiveSheet.UsedRange.Value
FOR i=2 TO ALEN(arr,1)
    DO CASE
       CASE arr(i,4)='字符'
            x1='C'
       CASE arr(i,4)='日期'
            x1='D'
       CASE arr(i,4)='逻辑'
            x1='L'
       CASE arr(i,4)='数字'
            x1='N'
    ENDCASE
    APPEND BLANK
    REPLACE field_name WITH arr(i,3),field_type WITH x1,field_len WITH arr(i,5)
    IF field_type='N'
       REPLACE field_dec WITH 2
    endif
*    REPLACE 字段内容 WITH arr(i,3),类型 WITH x1,位置 WITH arr(i,6)
ENDFOR
CREATE grxx from f:\stru1
USE grxx
*myexcel=createobject('excel.application')        && 创建一个对象
FOR in1=1 TO ADIR(axls,"个人信息*.xls")
    bookexcel=myexcel.workbooks.open(SYS(5)+SYS(2003)+"\"+axls[in1,1])            && 打开指定文件
    APPEND BLANK
    FOR i=2 TO ALEN(arr,1)
        col1=VAL(LEFT(arr(i,6),AT(',',arr(i,6))-1))
        row1=VAL(subs(arr(i,6),AT(',',arr(i,6))+1))
        DO case
           CASE arr(i,4)='字符' OR arr(i,4)='备注'
                xx1=ALLTRIM(myexcel.cells(col1,row1).text)
           CASE arr(i,4)='日期'
       *        xx1=CTOD(myexcel.cells(col1,row1).text)
                xx1=CTOD(TRANSFORM(myexcel.cells(col1,row1).text,"@R 9999-99-99"))
           CASE arr(i,1)='数字'
                xx1=VAL(myexcel.cells(col1,row1).text)
        ENDCASE
        REPLACE &arr(i,3) WITH xx1
    ENDFOR
    myexcel.workbooks.close &&关闭当前EXCEL文档
    myexcel.quit &&退出EXCEL
ENDFOR
BROWSE
运行程序只需要给出一个字段名对照表.XLS文件,程序就能自动完成数据表的创建,所有信息采集表的数据一次性导入,如果信息采集表发生了变化,只需要修改字段名对照表中的相关内容即可。
2014-09-01 15:11
快速回复:使用 VFP 读取 excel 的信息采集表各项内容
数据加载中...
 
   



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

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