本人日前正在为公司写一个接口,需要将DBF格式数据转换成为CSV格式。CSV格式即是以逗号分隔的一种文本文件。VFP中只有通过COPY TO 命令将数据转换成为TXT、Excel、DBase等格式,但是不能直接将数据转换成为CSV格式。于是想先将数据转换成为Excel格式再将其转换成CSV格式,因为Excel可以将其中的数据转换成为CSV格式。
首先在转换DBF到Excel时发现COPY TO 命令有最大行数的限制,超过16000行就会自动丢弃,而且不报警。于是使用OLE在VFP中填写Excel文件。实现如下:
* InFile 需要转换的DBF表名称
* OutFile 导出的文件名称
function ConverttoExcel(InFile,OutFile)
local XLApp,XLSheet
XLApp = GetObject('','Excel.Application')
XLApp.WorkBooks.add
XLSheet = XLApp.ActiveSheet
use &InFile alias table1
* 读取字段数
fz = fcount()
* 写第一行字段名称
for y = 1 to fz
XLSheet.Cells(1,y).value = fields(y)
next
x = 2
scan
for y = 1 to fz
fName = fields(y)
XLSheet.Cells(1,y).value = table1.&fName
next
x = x + 1
endscan
* 输出为Excel格式文件
XLApp.ActiveWorkBook.SaveAs(outfile)
* 输出为CSV格式文件
XLApp.ActiveWorkBook.SaveAs(outfile,6)
XLApp.Quit
release XLapp,XLSheet,tmpSheet
return
虽然这种方式能够转换所有表格,但是速度太慢。于是想到一个更简便的办法。就是直接利用Excel打开DBF格式文件然后另存为Excel格式或CSV格式。
* InFile 需要转换的DBF表名称
* OutFile 导出的文件名称
function ConverttoExcel(InFile,OutFile)
local XLApp
XLApp = GetObject('','Excel.Application')
XLApp.WorkBooks.Open(InFile)
* 转换成为Excel
XLApp.ActiveWorkBook.SaveAs(outfile)
* 转换成为CSV
XLApp.ActiveWorkBook.SaveAs(OutFile,6)
* 不存盘关闭
XLApp.ActiveWorkBook.Close(2)
XLApp.Quit
release XLapp
return
到此为止,任务已经完成。:-)

本文介绍了一种在Visual FoxPro(VFP)中将DBF格式数据转换为CSV格式的方法,通过先转换为Excel文件再另存为CSV。由于COPY TO命令存在行数限制,作者使用OLE对象创建Excel工作簿并填充数据,然后保存为CSV。后来发现直接用Excel打开DBF文件并另存为CSV更高效。

1699

被折叠的 条评论
为什么被折叠?



