注册 登录
编程论坛 VFP论坛

VFP9 关于STRTOFILE()函数

jsfchqf 发布于 2021-01-23 12:31, 4002 次点击
我有一个EXCEL文档,里面有员工工号这一栏,形式如下:
1991038    俞根红
1982015    俞桃红
1991060    钱明往
LS135    黄亚琼
LS136    李素芳
LS140    胡爱红
1973009    李如彩
1994052    韩林兰
LS161    俞饶红
LS162    徐党儿
LS064    徐党兔
LS165    徐年章
1991055    周鹤明
LS170    王雪年
1994058    宋国梅
1994064    金小林
1991061    李永红
LS172    王巧扣
在转换时,部分工号转不出来为空,主要是前面带字母的工号都转出后都为空,有没有什么办法解决

12 回复
#2
sdta2021-01-23 12:45
上传EXCEL文档,最后要转换为何种文档格式
#3
jsfchqf2021-01-23 13:25
回复 楼主 jsfchqf
生成DBF文档
#4
jsfchqf2021-01-23 14:32
回复 3楼 jsfchqf
只有本站会员才能查看附件,请 登录
#5
吹水佬2021-01-23 15:05
另存为文本文件再APPEND
#6
jsfchqf2021-01-23 15:22
回复 4楼 jsfchqf
我是这样的做的,可是有些记录的工号部分就是空值,主要是前面有LS字母的记录显示为空,不知道是什么原因,是不是因为一种为数字型,一种为字符型
#7
吹水佬2021-01-23 15:27
回复 6楼 jsfchqf
应该不会有问题,具体怎样做的,给代码看看
#8
jsfchqf2021-01-23 16:08
回复 7楼 吹水佬
      
CLEAR
SET TALK OFF
SET SAFETY OFF
M_FILE=GETFILE("XLSX","电子表格")      
cExcel = JUSTFNAME(M_File)
M_FILEPATH=ADDBS(JUSTPATH(M_file))    &&所打开文件所在的文件路径
DBF_FILE=SUBSTR(cexcel,1,LEN(cExcel)-4)
IF M_FILE=" "
    =MESSAGEBOX("请输入待导入的电子子表格文件!",0+48,"提示")
    RETURN
ELSE
    IF JUSTEXT(M_FILE)#"XLS"
        =MESSAGEBOX("你选择的不是EXCEL格式文档!",0+48,"提示")
        RETURN
    ENDIF
ENDIF


cHDR = "YES"   
cSheet = "[sheet1$A:AB]"

cSQL = "SELECT * FROM " + cSheet
cConn = "Provider=Microsoft.ACE.OLEDB.12.0;"+"Extended Properties='Excel 12.0;HDR="+cHDR+";IMEX=1';"+ "Data Source=" + cExcel

    ** EXCEL2003及之前版本
**    cConn = "Provider=Microsoft.Jet.OLEDB.4.0;"+ "Extended Properties='Excel 8.0;HDR="+cHDR+";IMEX=1';"+ "Data Source=" + cExcel
   
    SET DEFAULT TO &M_FILEPATH
    oConn = CREATEOBJECT("ADODB.Connection")
    oConn.Open(cConn)
    oRs = CREATEOBJECT("ADODB.Recordset")
    oRs.Open(cSQL, oConn, 1, 3, 1)
    oRs.MoveFirst

    USE e:\gz\jj_stru

    COPY STRUCTURE TO &M_FILEPATH\&DBF_FILE
    USE &DBF_FILE IN 2
    zap   

cStr = oRs.GetString()
STRTOFILE(cStr, "tmp.txt")
SELECT 2
APPEND FROM tmp.txt DELIMITED WITH TAB
SELECT * FROM &DBF_FILE
oRs.Close
oConn.Close
CLOSE  ALL
RETURN

以是是我的代码
附件是生成的txt文件,工号中出现了空值
只有本站会员才能查看附件,请 登录
#9
jsfchqf2021-01-23 16:11
回复 8楼 jsfchqf
只有本站会员才能查看附件,请 登录
#10
吹水佬2021-01-23 18:22
只有本站会员才能查看附件,请 登录

接口文件不规范,同一列各元素的数据类型不一样。
如工号,既然用到字母和数字组合,统一定义为文本类型就OK。
或者试试用Excel.Application来处理
#11
radiofan2021-01-23 19:04
以下是引用jsfchqf在2021-1-23 16:08:52的发言:

      
CLEAR
SET TALK OFF
SET SAFETY OFF
M_FILE=GETFILE("XLSX","电子表格")      
cExcel = JUSTFNAME(M_File)
M_FILEPATH=ADDBS(JUSTPATH(M_file))    &&所打开文件所在的文件路径
DBF_FILE=SUBSTR(cexcel,1,LEN(cExcel)-4)
IF M_FILE=" "
    =MESSAGEBOX("请输入待导入的电子子表格文件!",0+48,"提示")
    RETURN
ELSE
    IF JUSTEXT(M_FILE)#"XLS"
        =MESSAGEBOX("你选择的不是EXCEL格式文档!",0+48,"提示")
        RETURN
    ENDIF
ENDIF


cHDR = "YES"   
cSheet = "[sheet1$A:AB]"

cSQL = "SELECT * FROM " + cSheet
cConn = "Provider=Microsoft.ACE.OLEDB.12.0;"+"Extended Properties='Excel 12.0;HDR="+cHDR+";IMEX=1';"+ "Data Source=" + cExcel

    ** EXCEL2003及之前版本
**    cConn = "Provider=Microsoft.Jet.OLEDB.4.0;"+ "Extended Properties='Excel 8.0;HDR="+cHDR+";IMEX=1';"+ "Data Source=" + cExcel
   
    SET DEFAULT TO &M_FILEPATH
    oConn = CREATEOBJECT("ADODB.Connection")
    oConn.Open(cConn)
    oRs = CREATEOBJECT("ADODB.Recordset")
    oRs.Open(cSQL, oConn, 1, 3, 1)
    oRs.MoveFirst

    USE e:\gz\jj_stru

    COPY STRUCTURE TO &M_FILEPATH\&DBF_FILE
    USE &DBF_FILE IN 2
    zap   

cStr = oRs.GetString()
STRTOFILE(cStr, "tmp.txt")
SELECT 2
APPEND FROM tmp.txt DELIMITED WITH TAB
SELECT * FROM &DBF_FILE
oRs.Close
oConn.Close
CLOSE  ALL
RETURN

以是是我的代码
附件是生成的txt文件,工号中出现了空值



还能这么连接,高手!
#12
jsfchqf2021-01-24 07:04
回复 10楼 吹水佬
谢谢楼主的帮助,我是菜鸟,能不能给出具体的方法
#13
吹水佬2021-01-24 15:32
以下是引用jsfchqf在2021-1-24 07:04:12的发言:

谢谢楼主的帮助,我是菜鸟,能不能给出具体的方法

10楼不是说了吗,有问题的列要统一数据类型
试试先将工号列所有数据改为文本格式
或者先用EXCEL另存为文本文件
1