摘要:介紹了VFP數據表文件(.DBF)與Excel數據表(.XLS)間數據的相互轉換,并對轉換中存在的問題進行分析,提出解決的方法。
關鍵詞:Visual FoxPro軟件;Excel軟件;數據文件;數據轉換
中圖分類號:TP311.132 文獻標識碼:A文章編號:1009-3044(2008)35-2396-02
The Data Conversion of DBF Files and Excel Files
LUO Zheng-sheng
(Panzhihua University, Panzhihuai 617000, China)
Abstract: This paper introduces the data conversion ofVFP Table (.DBF) and Excel Sheet (.XLS), analyzes the problems during conversion process and puts forward its solutions.
Key words: visual foxPro software; excel software; data files; data conversion
DBF文件是VFP(Visual FoxPro)的數據表文件,VFP是一種關系型數據庫管理系統,具有強大的數據處理功,不僅是一個信息管理系統的編程平臺,而且提供了以命令方式操作處理數據的功能,在管理工作中得到廣泛應用;Excel文件是指Microsoft Excel軟件生成的電子表格文件,Microsoft Excel是微軟公司辦公系列軟件(Microsoft Office)中一個優秀的電子表格處理軟件,具有強大的制表功能,在操作界面、公式運算、圖表等方面有著獨到的優勢,為廣大辦公應用人員所熟悉和使用,正是由于他們功能間存在的差異,兩種軟件產生的數據常常需要進行轉換,以達到方便、高效處理數據的目的。
1 轉換的方法及其存在的問題
Visual FoxPro與Microsoft Excel都是微軟件公司的軟件產品,在各自軟件中提供了數據間進行相互轉換的功能。
1) 將數據庫表文件向Excel表格文件轉換(dbf→xls),可以通過:
① 在Excel中直接打開DBF數據文件或者利用“數據”菜單下“導入外部數據”實現數據轉換;
② 利用Visual FoxPro的“導出”功能來實現數據轉換。
2) 將Excel表格文件向數據庫表文件轉換(xls→dbf),可以通過:
① Excel的“另存為”所指定的文件類型(DBF)實現數據轉換;
② 利用Visual FoxPro中的“導入”功能來實現數據轉換。但是,在將數據庫文件向Excel表格文件轉換的過程中,會出現如下問題:
問題一:如果在Excel中通過直接打開或利用導入外部數據的方法,要求這種DBF文件只能是EXCEL導出來的DBF文件才行,否則不能正確導入。
問題二:利用Visual FoxPro的“導出”功能(或用COPY TO filename.XLS TYPE XL5 命令)來實現數據轉換,則只能轉換16384條記錄,多余的記錄不能轉換成Excel文件。
2 問題分析及解決方案
1) 對于問題一:通過對Excel導出來的DBF文件和用Visual FoxPro建立產生的DBF文件進行分析,兩種方式產生的DBF文件是有區別的:由Excel導出來的DBF文件第一個字節為03(十六進制),而用Visual FoxPro建立產生的DBF文件第一個字節為30(十六進制),而Excel在識別DBF文件的具體格式時只辨認第一個字節,正是由于第一個字節的不同,導致了用Visual FoxPro建立產生的DBF文件不導入到Excel數據表中。可以通過如下方法對其進行修改:
方法一:使用DEBUG命令:
-Nfilename.DBF
-L
-E 100 03
-W
-Q
但要注意:使用DEBUG命令只對較小的文件起作用,對于較大的數據表文件,運行L命令時,會出現“Insufficient memory(不足的內存)”錯誤。
方法二:使用WinHex等十六進制編輯工具,打開文件進行修改,即將文件的第一個字節30(十六進制)改為03(十六進制)后保存即可。
經過上述修改后的DBF文件可以成功地將DBF文件導入到Excel文件中,但此修改方法僅適用于不包括備注型/通用型等復雜數據類型的DBF數據表文件。如果DBF數據表文件包含復雜數據類型,修改后的文件在Excel中打開時可能會產生數據丟失現象。
2) 對于問題二:這是由于Visual FoxPro軟件系統中,針對的是以前的Excel4.0的工作表格式來進行數據的導出,即只容許16384行的數據表格,因此在使用Visual FoxPro的“導出”功能時,如果數據記錄數大于16384條記錄時,則需要采用另外的方式進行轉換。
方法一:借助于其它格式文件(如txt文件),進行二次轉換
① 用COPY TO filename.TXT TYPE SDF 命令導出成標準格式文本文件。
② 在用Excel導入數據,從文本文件導入。數據?導入外部數據?導入數據,然后在對話框中選擇文本文件。
方法二:使用編程方法來實現DBF向XLS數據轉換
程序如下:DBFtoXLS.prg
SET TALK OFF
CLEAR
ACCEPT \"請輸入要轉換的數據表名:\" TO FoxTable
USE FoxTable打開需要導出的數據表
oExcelApp=CREATEOBJECT(\"Excel.Application\") 產生Excel對象
oExcelApp.Workbooks.Add添加新工作簿
oExcelApp.Worksheets(\"Sheet1\").Activate設置第1個工作表為激活工作表
oExcelApp.Visible=.t. 顯示Excel窗口
nFldCount=Fcount() 取得字段數
FOR i=1 TO nFldCount
oExcelApp.Cells(1,i).Value=Field(i)在(1,i)單元格中寫入字段名稱
ENDFOR
cRecc=Reccount() 取得記錄個數
SCAN
WAIT \"正在寫入\"+ALLT(STR(Recno(),5))+\"/\"+;
ALLT(Str(cRecc))+\"條記錄\"; WINDOW NOWAIT
FOR k=1 TO nFldCount
vValue=Field(k)
oExcelApp.Cells(Recno()+1,k).Value=vValue給單元格賦值
ENDFOR
ENDSCAN
WAIT CLEAR
=MESSAGEBOX(\"轉換完畢!\", 64, \"OK\")
CLOSE DATABASES ALL
SET TALK ON
RETURN
在Visual FoxPro中運行這個程序,即可將DBF的所有記錄轉換到Excel文件中。由于Excel目前也只能處理65536條記錄,因此若某DBF文件的記錄數據超過Excel文件的容量,則需要將文件分成幾個小一點的文件后再進行轉換。
3 結束語
VFP和Excel都可以用來進行數據表的處理,兩者間有較好交互功能,如果巧妙地將二者的優點結合起來,有效實現數據表數據的相互轉換,比如將Excel數據表轉換成DBF數據表,利用VFP進行簡單的編程對處理一些在Excel中不容易處理的數據,然后再將處理后的VFP將DBF數據表轉換成Excel數據表,在Excel中充分利用Excel方便的操作對數據表進行排版和報表打印功能,這將會大大方便我們的工作,提高工作效率。
參考文獻:
[1] 劉迎甫.Visual FoxPro面向對象程序設計[M].北京:清華大學出版社,2004.
[2] 張洪舉.專家門診:Visual FoxPro開發答疑[M].北京:人民郵電出版社,2003.
[3] 杜茂康.Excel在數據管理與分析中的應用[M].北京:清華大學出版社,2005.
[4] 朱明.如何實現FoxPro和Excel數據間相互轉換[J].中國審計信息與方法,2002,(10).