| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2864 人关注过本帖
标题:将excel逐个转为dbf,代码未运行成功,请问错在哪里了?能帮我指出来吗?谢谢 ...
只看楼主 加入收藏
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
结帖率:96%
收藏
已结贴  问题点数:20 回复次数:13 
将excel逐个转为dbf,代码未运行成功,请问错在哪里了?能帮我指出来吗?谢谢!
程序代码:
SET DEFAULT TO ADDBS(JUSTPATH(SYS(16)))                 
CLEAR  
CLOSE  all
SET SAFETY OFF 

iCount=ADIR(xlsList,"xls")
FOR i=1 to iCount
    xlsName=xlsList(i,1)
    ff=JUSTSTEM(xlsName)
      
cExcel =SYS(5)+SYS(2003)+"\"+ff+'.xls'   
cHDR = "YES"    
cSheet = "[sheet1$A2:d]"
cSQL = "SELECT * FROM " + cSheet
    cConn = "Provider=Microsoft.ACE.OLEDB.12.0;";
            + "Extended Properties='Excel 12.0;HDR="+cHDR+";IMEX=1';";
            + "Data Source=" + cExcel 
oConn = CREATEOBJECT("ADODB.Connection")
oConn.Open(cConn)
oRs = CREATEOBJECT("ADODB.Recordset")
oRs.Open(cSQL, oConn, 1, 3, 1)
oRs.MoveFirst
cstr = ""

CREATE CURSOR tt (编号 I, 姓名 C(10), 联系电话 C(20), 部门 C(10))
cStr = oRs.GetString()
STRTOFILE(cStr, "tmp.txt")
SELECT tt
APPEND FROM tmp.txt DELIMITED WITH TAB  FOR 编号<>0

 COPY TO &ff 
oRs.Close
oConn.Close
CLEAR ALL 
*RETURN
ENDFOR

****以上代码未运行成功,请问错在哪里了?能帮我指出来吗?谢谢!
通讯录教导处.rar (2.8 KB)

通讯录校长室.rar (2.98 KB)


[此贴子已经被作者于2020-12-5 06:21编辑过]

搜索更多相关主题的帖子: excel 运行 CLOSE 代码 运行 成功 excel 成功 CLOSE 代码 
2020-12-04 21:52
qingss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-5-5
收藏
得分:0 
我的做法和你的思路不一样,一般XLS文件要转为DBF,应该保证XLS文件有固定的结构。
1、创建DBF文件
2、读取XLS的每一行并插入至DBF文件

如果你需要,可发一个程序段给你,告诉我你的邮箱。
2020-12-05 09:11
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:10 
用 Excel.Application 也可以
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
cDefaultPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefaultPath)
SET SAFETY OFF
CREATE CURSOR tt (编号 I, 姓名 C(10), 联系电话 C(20), 部门 C(10))
xls_dbf(cDefaultPath + "通讯录校长室.xls")
xls_dbf(cDefaultPath + "通讯录教导处.xls")
BROWSE
RETURN

FUNCTION xls_dbf(cInXLS)
    cOutTXT = cDefaultPath + "tmp.txt"
    oExcel = CREATEOBJECT("Excel.Application")
    oExcel.DisplayAlerts = .F.
    oExcel.WorkBooks.Open(cInXLS)
    oExcel.ActiveWorkBook.SaveAs(cOutTXT, -4158)
    oExcel.WorkBooks.Close
    oExcel.Quit
    SELECT tt
    APPEND FROM (cOutTXT) DELIMITED WITH TAB FOR 编号<>0
    DELETE FILE (cOutTXT)
ENDFUNC
2020-12-05 19:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 楼主 杂七杂八
改几处看看
1、iCount=ADIR(xlsList,"xls")
  改为 iCount=ADIR(xlsList,"*.xls")
2、cSheet = "[sheet1$A2:d]"
  改为:cSheet = "[sheet1$A:d]"
3、
CLEAR ALL
ENDFOR
改为:
ENDFOR
CLEAR ALL

[此贴子已经被作者于2020-12-5 21:08编辑过]

2020-12-05 21:04
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3409
注 册:2012-2-29
收藏
得分:0 
@杂七杂八,根据你的,结合吹水版主的改动,整理了一下,请试一试.

[此贴子已经被作者于2020-12-6 05:42编辑过]

2020-12-06 05:30
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3409
注 册:2012-2-29
收藏
得分:10 
@杂七杂八,根据你的,结合吹水版主的改动,整理了一下(VFP 9.0),请试一试:
程序代码:
SET DEFAULT TO ADDBS(JUSTPATH(SYS(16)))                 
CLEAR  
CLOSE  all
SET SAFETY OFF 

iCount = ADIR(xlsList,"*.xls")
FOR i = 1 to iCount
    xlsName = xlsList(i,1)
    ff = JUSTSTEM(xlsName)
    cExcel = SYS(5) + CURDIR() + ff + '.xls'   
    cSheet = "[sheet1$A:d]"
    cSQL = "SELECT * FROM " + cSheet
    cConn = "DBQ=" + cExcel + ";DefaultDir=C:\;Driver={Microsoft Excel Driver (*.xls)};FIL=excel 4.0;ReadOnly=0;UID=admin;pwd=;"
    m_conn = sqlstringconnect(cConn)          
    if m_conn > 0
       *  messagebox("连接成功",64,"数据源")
       oConn = CREATEOBJECT("ADODB.Connection")
       oConn.Open(cConn)
       
       oRs = CREATEOBJECT("ADODB.Recordset")
       oRs.Open(cSQL, oConn, 1, 3, 1)
       oRs.MoveFirst
       cstr = ""
       
       CREATE CURSOR tt (编号 I, 姓名 C(10), 联系电话 C(20), 部门 C(10))
       cStr = oRs.GetString()
       
       STRTOFILE(cStr, "tmp.txt")
       SELECT tt
       APPEND FROM tmp.txt DELIMITED WITH TAB FOR 编号<>0

       COPY TO (ff) 
       oRs.Close
       oConn.Close
    else 
       messagebox("连接不成功",64,"数据源")  
    endif
ENDFOR
CLEAR ALL
CLOSE ALL
QUIT


[此贴子已经被作者于2020-12-6 05:42编辑过]

2020-12-06 05:30
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
收藏
得分:0 
谢谢吹水佬
谢谢schtg
在学习中……,不明白的地方再请教。
最终想实现:
1、程序放在哪儿都能运行;
2、excel有20~30个结构完全相同,只不过是excel表文件名不同;
3、excel逐个转换成同名dbf表后,合并生成一个总表dbf。

[此贴子已经被作者于2020-12-7 06:11编辑过]

2020-12-07 05:56
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:0 
以下是引用杂七杂八在2020-12-7 05:56:20的发言:

谢谢吹水佬
谢谢schtg
在学习中……,不明白的地方再请教。
最终想实现:
1、程序放在哪儿都能运行;
2、excel有20~30个结构完全相同,只不过是excel表文件名不同;
3、excel逐个转换成同名dbf表后,合并生成一个总表dbf。

SET TALK OFF
SET SAFETY OFF
CLEAR ALL
CLEAR
dir1=GETDIR()
SET DEFAULT TO &dir1.
CREATE CURSOR tt (编号 I, 姓名 C(10), 联系电话 C(20), 部门 C(10))
myexcel=createobject('excel.application')
myexcel.visible=.t.
FOR i=1 TO ADIR(xfile,"*.xls*")
    bookexcel=myexcel.workbooks.open(dir1+xfile(i,1))
    o_SheetName=myexcel.application.ActiveSheet.Name
    sj=bookexcel.Worksheets(o_SHEETNAME).usedrange.value
    FOR j=2 TO ALEN(sj,1)
        APPEND BLANK
        REPLACE 编号 WITH sj(j,1),姓名 WITH sj(j,2),联系电话 WITH sj(j,3),部门 WITH sj(j,4)
    ENDFOR
ENDFOR
BROWSE
SET TALK ON
SET SAFETY ON
RETURN


[此贴子已经被作者于2020-12-7 15:17编辑过]

2020-12-07 10:08
shenkj001
Rank: 3Rank: 3
来 自:河南安阳
等 级:论坛游侠
威 望:9
帖 子:340
专家分:147
注 册:2005-5-23
收藏
得分:0 
回复 8楼 wangzhiyi
经测试:FOR j=2 TO ALEN(sj,2)改为 FOR j=2 TO ALEN(sj,1) &&1为行数

shenkj001@
2020-12-07 11:03
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
收藏
得分:0 
回复 9楼 shenkj001
运行到cStr = oRs.GetString()时出现
图片附件: 游客没有浏览图片的权限,请 登录注册

这个提示不明白。
2020-12-07 19:28
快速回复:将excel逐个转为dbf,代码未运行成功,请问错在哪里了?能帮我指出来吗 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028504 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved