注册 登录
编程论坛 VFP论坛

如何从Excel中建立DBF数据表

lianliming 发布于 2019-01-05 13:13, 9010 次点击
Excel表格中第1行为建立Dbf的字段,从第2行开始为Dbf的记录,如何用编程形式将Excel表格转换为Dbf数据表,谢谢!
如表:
只有本站会员才能查看附件,请 登录
21 回复
#2
sdta2019-01-05 14:28
运行环境:WINXP+EXCEL2003+VFP9 7.423
程序代码:
cFileName = SYS(5) + SYS(2003) + "\Excel导入Dbf测试数据.xls"
oExcel = CreateObject("Excel.Application")
WITH oExcel
    .WorkBooks.Open(cFileName)
    .ActiveSheet.UsedRange.Columns.AutoFit
    nCols = .ActiveSheet.UsedRange.Columns.Count
    cStru = ""
    FOR ii = 1 TO nCols
        nWidth = INT(.ActiveSheet.Columns(ii).ColumnWidth)
        cStru = cStru + IIF(EMPTY(cStru), "", ",") + .ActiveSheet.Cells(1, ii).Text + " C(" + TRANSFORM(nWidth) + ")"
    ENDFOR
    .DisplayAlerts = .F.
    .ActiveWorkbook.SaveAs(cFileName, 39)
    .DisplayAlerts = .T.
    .QUIT
    RELEASE oExcel
ENDWITH

CREATE CURSOR Cssj (&cStru)
APPEND FROM Excel导入Dbf测试数据 TYPE XL5
SELECT * FROM Cssj WHERE RECNO() > 1

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2019-1-5 14:32编辑过]

#3
sdta2019-01-05 15:28
将EXCEL另存为:
只有本站会员才能查看附件,请 登录

然后再追加
#4
sostemp2019-01-05 18:35
cFileName = SYS(5) + SYS(2003) + "\Excel导入Dbf测试数据.xlsx"
cOutFileName = SYS(5) + SYS(2003) + "\Excel导入Dbf测试数据.xls"
oExcel = CreateObject("Excel.Application")
WITH oExcel
    .WorkBooks.Open(cFileName)
    .ActiveSheet.UsedRange.Columns.AutoFit
    nCols = .ActiveSheet.UsedRange.Columns.Count
    cStru = ""
    FOR ii = 1 TO nCols
        nWidth = INT(.ActiveSheet.Columns(ii).ColumnWidth)
        cStru = cStru + IIF(EMPTY(cStru), "", ",") + .ActiveSheet.Cells(1, ii).Text + " C(" + TRANSFORM(nWidth) + ")"
    ENDFOR
    .DisplayAlerts = .F.
    .ActiveWorkbook.SaveAs(cOutFileName, 39)
    .DisplayAlerts = .T.
    .QUIT
    RELEASE oExcel
ENDWITH

CREATE CURSOR Cssj (&cStru)
APPEND FROM Excel导入Dbf测试数据 TYPE XL5
SELECT * FROM Cssj WHERE RECNO() > 1

抖胆把版主的代码小小修改了一下,应该是可以运行了。

[此贴子已经被作者于2019-1-5 18:36编辑过]

#5
sostemp2019-01-05 18:42
只有本站会员才能查看附件,请 登录

#6
sdta2019-01-05 18:52
如果你电脑上安装有EXCEL2007,可以将扩展名改为.XLSX
#7
lianliming2019-01-06 09:51
感谢2位老师!经测试,4楼程序在WIN10(64位专业版)+EXCEL2016+VFP9 7.423环境下可运行!!
再次感谢,谢谢!!!
#8
lianliming2019-01-06 10:08
有点高兴得太早,运行一次成功后,就.........
只有本站会员才能查看附件,请 登录
#9
sdta2019-01-06 10:40
路径问题
#10
wengjl2019-01-07 11:00

cFileName =GETFILE("xls")
 oExcel = CreateObject("Excel.Application")
 WITH oExcel
     .WorkBooks.Open(cFileName)
     .ActiveSheet.UsedRange.Columns.AutoFit
     .DisplayAlerts = .F.
     .ActiveSheet.cells(1,1).select
     dbfname=FORCEEXT(cFileName,"dbf")
     .ActiveWorkbook.SaveAs(dbfName,8)
     .Workbooks.close
     .QUIT
     RELEASE oExcel
 ENDWITH


利用VF直接另存为……

EXCEL字段名不可以超过5个汉字——因为另存为DBF是自由表。

[此贴子已经被作者于2019-1-7 12:42编辑过]

#11
hyswcyh2019-07-22 17:15
这个代码更简洁!收藏!
#12
zhousr2019-08-12 15:00
回复 10楼 wengjl
为什么我运行时提示不能取得类的saveas属性呢?谢谢!
只有本站会员才能查看附件,请 登录
#13
zhousr2019-08-12 15:00
回复 10楼 wengjl
为什么我运行时提示不能取得类的saveas属性呢?谢谢!
只有本站会员才能查看附件,请 登录
#14
wengjl2019-08-12 15:15
我是 VFP8.0 + EXCEL2003 用了好多年了,没问题。
#15
zhousr2019-08-12 16:02
我是VFP9+EXCEL2007
#16
zhousr2019-08-12 16:18
哦,估计是EXCEL2007没有另存为DBF这个选项的原因。
#17
xs5912222019-08-12 19:13
应该是的
#18
zhousr2019-08-13 10:18
这问题有解吗?印象中好像有个补丁,打了之后2007另存为的时候就有DBF选项了。不知哪位有这个补丁?
#19
莲子5282019-09-04 11:05
直接导入最快。文件---->导入----->导入向导--    根据提示完成即可
#20
分号2019-11-09 22:38
要是数据里带小数点的导入?如何做?
#21
c2j2020-01-17 11:01
学习学习
#22
金急雨2020-07-31 14:36
请问大神们,导过来的时间是字符型字段,请问怎么调成日期型字段还能保留字段内容呢?
只有本站会员才能查看附件,请 登录
1