| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1701 人关注过本帖
标题:求教关于导出数据格式转换后,数据不对的问题
只看楼主 加入收藏
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:651
专家分:20
注 册:2014-1-16
结帖率:88.6%
收藏
已结贴  问题点数:20 回复次数:6 
求教关于导出数据格式转换后,数据不对的问题
我需要将MHTML格式的数据导入,我采取的办法是用VFP打开EXCEL,然后用EXCEL打开MHTML格式的文件,第二列需要从字符格式转换成数据格式,但是转换以后,比如12000.000,变成了12,14500.000也变成了14,我试着直接用EXCEL打开MHTML格式的表格,发现12000.000,在EXCEL里面变成了12,000.000,将其从字符格式转换后,导入进来就变成了12,同样14,500.000,变成了14,请问应该如何处理才能正确导入。
6.11.rar (2.69 KB)
,我查了下资料,问题出在千位分隔符上,如果在转换前去掉千位分隔符应该就正确了

[此贴子已经被作者于2020-6-11 21:23编辑过]

搜索更多相关主题的帖子: 转换 格式 数据格式 数据 EXCEL 
2020-06-11 21:14
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9803
专家分:26906
注 册:2012-2-5
收藏
得分:7 
程序代码:
CLOSE DATABASES 
ERASE aa.dbf
oExcel = CreateObject("Excel.Application")
WITH oExcel
    .Workbooks.Open(SYS(5)+SYS(2003)+"\6.11.MHTML")
    .ActiveSheet.Columns(2).NumberFormatLocal = "0.00"
    .ActiveSheet.UsedRange.Select
    .Selection.Columns.AutoFit
    .DisplayAlerts = .F.
    .ActiveWorkbook.Saveas(SYS(5) + SYS(2003) + "\aa.DBF", 11)
    .ActiveWorkbook.Close
    .DisplayAlerts = .T.
    .Quit
ENDWITH 
RELEASE oExcel
SELECT * FROM aa


[此贴子已经被作者于2020-6-11 22:30编辑过]


坚守VFP最后的阵地
2020-06-11 22:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10541
专家分:42927
注 册:2014-5-20
收藏
得分:7 
也可以直接解释6.11.MHTML
图片附件: 游客没有浏览图片的权限,请 登录注册

CREATE CURSOR tt (预留 C(10), 需求数量 N(10,3))
s = FILETOSTR("6.11.MHTML")
i = 4
DO WHILE .T.
    str = STREXTRACT(s, [str="], ["], i)
    num = VAL(STREXTRACT(s, [num="], ["], i-3))
    IF EMPTY(str)
        EXIT
    ENDIF
    INSERT INTO tt VALUES (str, num)
    i = i + 1
ENDDO
SELECT * FROM tt
收到的鲜花
2020-06-11 22:41
schtg
Rank: 12Rank: 12Rank: 12
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1546
专家分:3003
注 册:2012-2-29
收藏
得分:7 
向两位版主学习啦,谢谢!
2020-06-12 07:21
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:651
专家分:20
注 册:2014-1-16
收藏
得分:0 
非常感谢吹水佬和sdta师傅的解答,尤其是吹水佬师傅,居然可以这么弄,这比先打开excel快多了。我又一个小小的疑问,如果本身是XLS类型电子表格,好像不能用吹水佬师傅的方法,还是要先用excel打开表,第二个疑问是吹水佬师傅的函数我还是没有大看懂,i=4,为什么要从4开始,还有 num = VAL(STREXTRACT(s, [num="], ["], i-3))这里为什么要i-3。sdta师傅的办法就是每次会在硬盘中产生一个表,这不是我想要的,我只需要一个临时表

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

2020-06-12 16:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10541
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 5楼 fanjinyu9108
1、任何文件都要解释出来才容易看得懂,XLS文件也不例外。如果本来就有软件来处理就无必要自己去解释,如DBF用VFP就可以搞定。
2、i=4,i是定位用的,是str相对s的偏移,i-3是num相对s的偏移。
或者先定位到第一个所要的str为s的开始,这样就好理解点,如:
CREATE CURSOR tt (预留 C(10), 需求数量 N(10,3))
s = FILETOSTR("6.11.MHTML")
s = SUBSTR(s, AT([str="],s,4))
i = 1
DO WHILE .T.
    str = STREXTRACT(s, [str="], ["], i)
    num = VAL(STREXTRACT(s, [num="], ["], i))
    IF EMPTY(str)
        EXIT
    ENDIF
    INSERT INTO tt VALUES (str, num)
    i = i + 1
ENDDO
SELECT * FROM tt
2020-06-13 07:57
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:651
专家分:20
注 册:2014-1-16
收藏
得分:0 
非常感谢吹水佬的解读,我来慢慢消化
2020-06-14 20:57
快速回复:求教关于导出数据格式转换后,数据不对的问题
数据加载中...
 
   



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

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