将DBF数据文件导成excel文件的问题

来源:互联网 发布:sql sa登陆 18456 编辑:程序博客网 时间:2024/05/16 08:14

用 copy to EXCEL表名 type xl5
只能导出16383条记录,超过此数的用以下方法导出:

方法一:

如果你的数据中都是普通的数值和字符串类型,直接用Excel打开表,然后“另存为”一个Excel就可以了。

---------------------------------------------------------------

方法二:用代码导

&& DbfToExcel.PRG

&& 记得要安装Excel啊,否则不好用

CLOSE DATABASES ALL

SET DATE YMD

SET CENTURY ON

cDbfFile = GETFILE("dbf")

IF EMPTY(cDbfFile)

RETURN

ENDIF

USE (cDbfFile) ALIAS FoxTable IN 0

IF NOT USED("FoxTable")

=MESSAGEBOX("打开表失败,程序将中止!", 16, "Error")

RETURN

ENDIF

cExcelFile =PUTFILE("保存为(&N):",JUSTSTEM(cDbfFile)+".xls","xls")

IF EMPTY(cExcelFile)

CLOSE DATABASES ALL

RETURN

ENDIF

Select FoxTable

oExcelSheet = GETOBJECT("","Excel.Sheet")&& 产生Excel对象

IF NOT TYPE("oExcelSheet") = "O"

=MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")

RETURN

ENDIF

oExcelApp = oExcelSheet.Application

oExcelApp.Workbooks.Add()

oExcelApp.ActiveWindow.WindowState=2

oSheet = oExcelApp.ActiveSheet

nFldCount = AFIELDS(aFldList, "FoxTable")

FOR i = 1 TO nFldCount

oSheet.Cells(1,i).Value = aFldList[i, 1]

ENDFOR

cRecc = STR(RECCOUNT("FoxTable"))

SCAN

WAIT WINDOW ALLTRIM(STR(RECNO())) + "/" + cRecc NOWAIT

FOR i = 1 TO nFldCount

vValue = .NULL.

IF AT(aFldList[i, 2], "CDLMNFIBYT") = 0

LOOP

ENDIF

cFldName = aFldList[i, 1]

vValue = EVALUATE(cFldName)

DO CASE

CASE aFldList[i, 2] = "C" &&字符/字符串

vValue = TRIM(vValue)

CASE aFldList[i, 2] = "D" &&日期

vValue = DTOC(vValue)

CASE aFldList[i, 2] = "T" &&日期时间

vValue = TTOC(vValue)

CASE INLIST(aFldList[i, 2], "N", "F", "I", "B", "Y")&& 数值

CASE aFldList[i, 2] = "L" &&逻辑

CASE aFldList[i, 2] = "M" &&备注型

OTHERWISE

vValue = .NULL.

ENDCASE

IF VARTYPE(vValue) = "C" AND EMPTY(vValue)

LOOP

ENDIF

IF NOT ISNULL(vValue)

oSheet.Cells(RECNO("FoxTable")+1, i).Value = vValue

ENDIF

ENDFOR

ENDSCAN

cChrStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

FOR i = 1 TO nFldCount

cColumn = SUBSTR(cChrStr, INT((i-1)/26), 1) + SUBSTR(cChrStr,IIF(MOD(i, 26)= 0, 26, MOD(i, 26)) , 1)

oSheet.Columns(cColumn + ":" + cColumn).ColumnWidth= 12

IF aFldList[i, 2] = "M"

oSheet.Columns(cColumn + ":" + cColumn).WrapText =.F.

ENDIF

ENDFOR

oExcelApp.ActiveWorkbook.SaveAs(cExcelFile)

oExcelApp.ActiveWorkbook.Close(.F.)

oExcelApp.ActiveWorkbook.Close(.F.)

oExcelApp.Quit

oExcelSheet = .NULL.

oExcelApp = .NULL.

WAIT CLEAR

=MESSAGEBOX("转换完毕!", 64, "OK")

CLOSE DATABASES ALL

程序是用VFP8写的,在VFP6中也可以,没有问题。只要能够执行完成,就会是正确的,行数只受你安装的Excel最大行数限制,至少大于65535行

这个程序支持所有字段类型,包括MEMO类型字段。  

原创粉丝点击