巧借Excel另存功能,在VFP中轉換表格爲CSV格式

    本人日前正在爲公司寫一個接口,需要將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

到此爲止,任務已經完成。:-)

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章