| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1653 人关注过本帖
标题:批量把excel文件转换成dbf文件,为什么有的转换正常,而有的转换后会出现多 ...
只看楼主 加入收藏
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
不用一个一个对dbf文件进行浏览,看是否产生多余的空记录。
2015-01-13 08:49
yjc9894301
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2011-3-25
收藏
得分:0 
回复 7楼 tlliqi
有没有方法判断不让这些空行进行转换呢?
2015-01-13 09:21
yjc9894301
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2011-3-25
收藏
得分:0 
回复 9楼 吹水佬
先将excel文件转换成纯文本文件,我试用过,也可以,但有的是数值型数据,含有小数位,还得将文本数据再转成数值型数据,就是麻烦了点,谢谢指点!
2015-01-13 11:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用yjc9894301在2015-1-13 11:32:09的发言:

先将excel文件转换成纯文本文件,我试用过,也可以,但有的是数值型数据,含有小数位,还得将文本数据再转成数值型数据,就是麻烦了点,谢谢指点!

VFP会自动按表字段类型转换。
如果只想导入符合条件的记录,执行 APPEND FROM ......FOR 条件表达式,这样能把excel文件转换成纯文本文件无用的东西去掉,excel文件里可能有些不是数据部分,如栏目名称等。
2015-01-13 11:42
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:0 
你可以直接在EXCEL环境下,将EXCEL文件另存为DBF文件呀(2010)不支持此功能。如果一定要编程解决些问题,给你一个程序也许能帮到你。
程序代码:
SET talk off
SET SAFETY off
M_File=GETFILE('xls','原始数据表')
IF M_File=" " 
   =MESSAGEBOX("请选择待导入的文件!",0+48,"提示")
   RETURN
ELSE 
   IF JUSTEXT(M_FILE)#"XLS"  &&获得文件扩展名  
      =MESSAGEBOX("您选择的不是EXCEL文档!",0+48,"提示")
      RETURN
   ENDIF
ENDIF 
USE cj
myexcel=createobject('excel.application') &&创建一个对象
myexcel.visible=.t.
bookexcel=myexcel.workbooks.open(M_File) &&打开指定文件
o_SheetName=myexcel.application.ActiveSheet.Name &&获取当前激活工作表的名称
UsedRange =bookexcel.worksheets(o_SheetName).UsedRange &&返回工作表中可使用的区域,UsedRange表的属性
o_cols=UsedRange.columns.count &&汇总列
IF UsedRange.rows.count<=1 
   =MESSAGEBOX("待导入数据行数太少,请检查!",0+16,"提示")
ELSE 
   DIMENSION ls(UsedRange.rows.count ,o_cols)
   ls=bookexcel.activesheet.usedrange.value
   APPEND FROM ARRAY ls  &&一次性将所有的记录全部追回到DBF文件中
*  如果需要对记录进行判断可以参考修改以下的程序。  
*   FOR i=2 TO ALEN(ls,1)
*       IF NOT EMPTY(ls(i,1))
*          APPEND BLANK  
*          REPLACE xm WITH ls(i,2),zymc WITH ls(i,3)
*          IF TYPE("ls(i,4)")='N'
*             REPLACE rxny WITH ALLTRIM(STR(ls(i,4)))
*          ELSE
*             REPLACE rxny WITH ls(i,4)
*          ENDIF
*          IF TYPE("ls(i,5)")='N'
*             REPLACE byny WITH ALLTRIM(STR(ls(i,5)))
*          ELSE
*             REPLACE byny WITH ls(i,5)
*          ENDIF
*          IF TYPE("ls(i,11)")='N'
*             REPLACE ksh WITH ALLTRIM(STR(ls(i,11),16,0))
*          ELSE
*             REPLACE ksh WITH ls(i,11)
*          ENDIF
*       endif
*  ENDFOR
ENDIF 
myexcel.workbooks.close &&关闭工作区
myexcel.quit &&关闭excel
brow 

蓝色部分是我自己工作的内容,你可以参考修改成你自己需要的字段和相应的数组元素。
还有非常奇怪,用这段程序读取你给的EXCEL文件,确定有些空记录,但是用另存的方法就没有那些空记录,期待有高手能解答此现象。

[ 本帖最后由 wangzhiyi 于 2015-1-13 15:33 编辑 ]
2015-01-13 15:27
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:12 
空记录是EXCEL表中本身就有的

坚守VFP最后的阵地
2015-01-13 15:55
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用sdta在2015-1-13 15:55:54的发言:

空记录是EXCEL表中本身就有的
No No No,Excel表本身有的是空行,但不是空记录,这是两种情况。如果空行都是空记录的话,但每次转换来的DBF文件都有3W多条记录了。
2015-01-13 15:59
yjc9894301
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2011-3-25
收藏
得分:0 
回复 15楼 wangzhiyi
这一问题困惑了好多年,在没有新的解决思路之前,我是这样处理的:考前每个单位都报有参加考试人数,我建有一数据库存放该信息,考后上报成绩(都是用电子表格)并对数据文件进行转换后,对转换后的记录数与原报参试人数进行对比后,如有差异,再采用另存方式解决!非常感谢高手的指导!
2015-01-13 16:42
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:0 
以下是引用yjc9894301在2015-1-13 16:42:50的发言:

这一问题困惑了好多年,在没有新的解决思路之前,我是这样处理的:考前每个单位都报有参加考试人数,我建有一数据库存放该信息,考后上报成绩(都是用电子表格)并对数据文件进行转换后,对转换后的记录数与原报参试人数进行对比后,如有差异,再采用另存方式解决!非常感谢高手的指导!
如果你的DBF文件字段是不变的,并且上报的电子表格数据的列是固定的,我可以帮你弄个程序,需要的话,你可以给几个电子表格文件及DBF文件给我。
2015-01-13 16:54
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用taifu945在2015-1-13 15:59:35的发言:

No No No,Excel表本身有的是空行,但不是空记录,这是两种情况。如果空行都是空记录的话,但每次转换来的DBF文件都有3W多条记录了。

是空记录,不是空行
CTRL+END 正常情况下应该是到最后一条记录
你看看楼主上传的EXCEL表,CTRL+END 后,光标在什么地方。

[ 本帖最后由 sdta 于 2015-1-13 19:22 编辑 ]

坚守VFP最后的阵地
2015-01-13 18:31
快速回复:批量把excel文件转换成dbf文件,为什么有的转换正常,而有的转换后会出 ...
数据加载中...
 
   



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

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