本人日前正在爲公司寫一個接口,需要將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
到此爲止,任務已經完成。:-)