| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2322 人关注过本帖, 1 人收藏
标题:再次请教各位高手EXCEL导入问题
只看楼主 加入收藏
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
判断字段如果是C类型,就强制转换
程序代码:
strpath=GETFILE("EXCEL98_2003文件:xls","导入EXCEL数据")&&&要导入的EXCEL表
LOCAL oexcel
oexcel=CREATEOBJECT("Excel.Application")
oexcel.workbooks.OPEN(strpath)
arrtableinfo=oexcel.activesheet.usedrange.VALUE&&&将EXCEL里的数据保存到数组arrtableinfo里
oexcel.QUIT
tablerow=ALEN(arrtableinfo,2)
RELEASE oexcel
USE 你的表&&&要导入EXCEL数据的dbf表
fieldn=AFIELDS(arrayname)&&将表结构信息保存到数组arrayname
FOR i =1 TO fieldn
    afieldname=arrayname(i,1)&&&读取dbf表的字段名
    IF EMPTY(afieldname)&&如果读取不到dbf字段就退出
        EXIT
    ENDIF
    DIMENSION arrfield(i)
****检测dbf字段名跟EXCEL的哪个字段一致,就将这个字段序号保存到数组arrfield里
    arrfield(i)=ASCAN(arrtableinfo,afieldname,1,tablerow)
ENDFOR
FOR i2=2 TO ALEN(arrtableinfo,1)-1&&&检测每一行EXCEL里的数据
    APPEND BLANK
    FOR i3=1 TO fieldn
        IF NOT EMPTY(arrfield(i3))&&如果EXCEK字段跟dbf字段匹配
            fieldname=arrayname(i3,1)
            IF arrayname(i3,2)=="C"&&&如果是C字段,就强制转换
                REPLACE &fieldname WITH TRANSFORM(arrtableinfo(i2,i3))
            ELSE
                REPLACE &fieldname WITH arrtableinfo(i2,i3)&&将dbf相匹配的字段值修改为EXCEL里的数据。
            ENDIF
        ENDIF
    ENDFOR
ENDFOR
BROWSE

坚持学习vfp,QQ:306805680
2012-11-30 23:34
cmy06
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-28
收藏
得分:0 
错了吧,应该是判断N型吧
2012-11-30 23:39
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:13 
以下是引用cmy06在2012-11-30 12:40:02的发言:

我有一个EXCEL表,里边有名称,编号,数量,单价等表头的列,我的DBF表里也有相应的字段.在EXCEL里这些列的排序有时候不一样例如,名称有的时候在A列,有时候在D列,而有时候又在别的列。能不能实现,再导入的时候根据表头来对应导入数据,如果可以,怎么实现。虚心学习中,请各位高手赐教。


程序代码:
lsfile =getfile("xls")
if justext(lsfile)<>"XLS"
   messageb("数据文件(.xls) 未选定","")
   retu
endif
*
o_excel =createObject("excel.application")
o_excel.workBooks.open(lsfile)
lsfd =""
for jj=1 to o_excel.activesheet.usedrange.columns.count
    jjc =o_excel.cells(1,jj).text
    if !empt(jjc)
       lsfd =lsfd +iif(empt(lsfd),"",",") +allt(jjc)
    endif
endfor
o_excel.workbooks.close
o_excel.quit
*
use 你的dbf表 excl
zap
appe fiel &lsfd from "&lsfile" xls
brow
2012-12-01 00:54
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:7 
以下是引用茵梦湖在2012-12-1 00:54:34的发言:



lsfile =getfile("xls")
if justext(lsfile)<>"XLS"
   messageb("数据文件(.xls) 未选定","")
   retu
endif
*
o_excel =createObject("excel.application")
o_excel.workBooks.open(lsfile)
lsfd =""
for jj=1 to o_excel.activesheet.usedrange.columns.count
    jjc =o_excel.cells(1,jj).text
    if !empt(jjc)
       lsfd =lsfd +iif(empt(lsfd),"",",") +allt(jjc)
    endif
endfor
o_excel.workbooks.close
o_excel.quit
*
use 你的dbf表 excl
zap
appe fiel &lsfd from "&lsfile" xls
brow

代码简洁好用!!!就是会产生第一行数据不符合要求的问题。所以加上删除第一行数据的代码就好了。

[ 本帖最后由 月沐庭轩 于 2012-12-1 08:36 编辑 ]

坚持学习vfp,QQ:306805680
2012-12-01 08:21
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用月沐庭轩在2012-11-30 21:21:44的发言:

这个自由表怎么定义它的字段?或者如何将EXCEL表直接转化为一个提前未定义字段的DBF自由表?用哪个语句?是不是还是APPEND FROM FileName xl5或xl8?
以前从未实际测试过,今天测试一下才发现利用VFP的导入功能(对应的命令是IMPORT FROM)导入的EXCEL表数据全部为字符类型,且字段名为EXCEL表的列号。
通过测试给予我启发,我原来都是通过程序逐行读入EXCEL表中的数据,运行时速度很慢,一个数千行的表通常要十多分钟才能读完。下次可以改变思路,先将EXCEL表格导入到DBF然后再转换处理,这样速度可以大幅度提高。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-12-01 10:30
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
回复 25楼 hu9jj
哦,原来这样,我也试一下,学一招。

坚持学习vfp,QQ:306805680
2012-12-01 11:08
cmy06
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-28
收藏
得分:0 
不错,很不错,感激不尽!
2012-12-01 16:41
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:682
专家分:1299
注 册:2009-3-1
收藏
得分:0 
把要导入的列名与DBF表字段名的对应关系存放到另一个DBF表,这样就不怕EXCEL表列的次序变化了
2012-12-01 20:00
cmy06
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-28
收藏
得分:0 
为什么会这样
以下是引用茵梦湖在2012-12-1 00:54:34的发言:



lsfile =getfile("xls")
if justext(lsfile)<>"XLS"
   messageb("数据文件(.xls) 未选定","")
   retu
endif
*
o_excel =createObject("excel.application")
o_excel.workBooks.open(lsfile)
lsfd =""
for jj=1 to o_excel.activesheet.usedrange.columns.count
    jjc =o_excel.cells(1,jj).text
    if !empt(jjc)
       lsfd =lsfd +iif(empt(lsfd),"",",") +allt(jjc)
    endif
endfor
o_excel.workbooks.close
o_excel.quit
*
use 你的dbf表 excl
zap
appe fiel &lsfd from "&lsfile" xls
brow
这段代码,很简洁,但会出现
图片附件: 游客没有浏览图片的权限,请 登录注册

怎么回事
2012-12-02 00:41
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:682
专家分:1299
注 册:2009-3-1
收藏
得分:0 
估计问题在宏替换中,你的表中没编号字段等
2012-12-02 11:26
快速回复:再次请教各位高手EXCEL导入问题
数据加载中...
 
   



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

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