一个 Excel 文件中日期及数值 转DBF数据的处理方法

grz001 2019-08-09 04:22:58
在EXCEL 中不同人录入时会有不同的习惯,如空值时会打空格,日期时会录入 2019.5、20190506、2019.05.06 、2019.5.6、2019-5-6,或是2019年5月6日,还有就是显示2019年5月,实际上是2019-5-1,有的还有日期时间型等等等。
我一般是都转换成文本格式,设置日期为 年月日格式,长型,用 4 位数字表示年,先用VARTYPE()得到值的类型。日期格式的,用dtoc()转换取10位的,"2019-01-01",数值格式也按需要取小数位,转成文本,其他的一般空值(NULL)和文本值,直接去掉前后空格导入;
SET DATE YMD LONG
SET CENTURY ON

alltrim(dtoc(excel_value,1))
alltrim(str(excel_value,100,2)) &&根据情况取小数位

另:VARTYPE( ) 函数与 TYPE( ) 函数类似, 但 VARTYPE( ) 执行更快,并且不需要用引号 ("") 将指定表达式括起。

Excel 文件内容如下
序号 EXCEL值类型 值
1 日期时间型 2019/1/1 11:01
2 日期型 2019年1月1日, 星期二
3 数值型 20190101.00
4 货币型 ¥20,190,101.00
5 常规 20190101

程序代码如下:
SET DATE YMD LONG
SET CENTURY ON
SET TALK OFF
CLOSE DATABASES all
CREATE TABLE ll FREE (B001 C(100) null,B002 C(100) null) &&创建数据表

SELECT ll
M_File=GETFILE('xls,xlsx','请选择EXCEL文件')
IF M_File==""
=MESSAGEBOX("请选择待导入 ECCEL 文件!",0+48,"提示")
RETURN
ELSE
IF JUSTEXT(M_FILE)#"XLS" AND JUSTEXT(M_FILE)#"XLSX" &&获得文件扩展名
=MESSAGEBOX("您选择的不是EXCEL文档!",0+48,"提示")
RETURN
ENDIF
ENDIF
My_excel=createobject('excel.application') &&创建一个对象
My_excel.Workbooks.open(M_File) &&打开指定文件
i=1
FOR EACH oMyVar IN My_Excel.sheets &&当前工作簿中 各工作表的名称
M_sheet="M_sheet"+ALLTRIM(STR(I))
i=i+1
&M_sheet=oMyVar.name
NEXT oMyVar

My_excel.Worksheets(M_sheet1).Activate &&激活第一表
UsedRange =My_excel.worksheets(M_sheet1).UsedRange &&返回工作表中可使用的区域,UsedRange表的属性
o_rows=UsedRange.rows.count &&汇总行
o_cols=UsedRange.columns.count &&汇总列
i=2
J=3

DO while .t.
excel_value=my_excel.cells(i,j).value
DO CASE
CASE vartype(excel_value)="T" &&日期时间型
C_value =ALLTRIM(DTOC(excel_value,1))
CASE vartype(excel_value)="D" &&日期型
C_value =alltrim(dtoc(excel_value,1))
CASE vartype(excel_value)="N" &&数值型
C_value =alltrim(str(excel_value,100,2)) &&根据情况取小数位
CASE vartype(excel_value)="Y" &&货币型
C_value =alltrim(str(excel_value,100,2)) &&根据情况取小数位
OTHERWISE &&其他
C_value = alltrim(excel_value) &&其他 取原值去掉前后空格
ENDCASE
SELECT ll
APPEND BLANK
REPLACE B001 WITH C_value,B002 WITH ALLTRIM(my_excel.cells(i,2).value)
i=i+1
IF i>=o_rows
EXIT
ENDIF
ENDDO
SELECT ll
BROWSE LAST

My_excel.Application.Visible=.T. && 置EXCEL可见

My_excel.WORKBOOKS.CLOSE &&关闭工作簿
My_excel.QUIT &&退出Excel
CLOSE all

RETURN
...全文
480 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_45690773 2019-12-12
  • 打赏
  • 举报
回复
可以测试下,学习了,感谢
wwle 2019-11-06
  • 打赏
  • 举报
回复
暂时没有用到,学习一下。

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧