Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

*.csv批量导入时的科学计法如何化解?

幽助  发表于:2019-01-27 09:13:33  
复制

先前感谢大佬“西出阳关无故人”的大力帮助,终于解决了XML的导入及字段的抽出。。

本次是变更成CSV导入了,因为料号是12位数字,在CSV文档里默认成“科学算法”显示了,然后同样的导入也变成了这样的显示,如何导入单纯的数字呢?

导入方法同XML一样:

     Dim F
     Dim TextLine
     With Application.FileDialog(3)
         .AllowMultiSelect = True
         .Filters.Clear
         .Filters.Add "csv文件", "*.csv"
         If .Show Then
             For Each F In .SelectedItems
                 Open F For Input As #1
                Do While Not EOF(1)
                    Line Input #1, TextLine
                    If Trim(TextLine) Like "RawLotId*" Then
                        CurrentDb.Execute "insert into Item(RawLotId) values ('" & Replace(Replace(TextLine, "val(RawLotId=)", ""), """", "") & "')"
                    End If
                 Loop
                 Close #1
             Next
         End If
     End With
CSV文件打开显示的是:

如上代码导入的数据显示:

求解:导入不显示科学计法,或者导入即使是科学计法,有什么办法转化成数字显示呢?

求支持!

 

Top
伊西军 发表于:2019-01-28 08:55:37
在csv文件中看下能否更改为正常的显示方式 然后重新导入试下

西出阳关无故人 发表于:2019-01-28 09:01:24

貌似要在导出或保存为csv文件时处理。例如在Excel编辑数据后保存为CSV文件,超过11位的“数值”会变为科学计数,重新打开后数据精度就不对了。

在Excel中,如果是串码之类的(应为文本型)误为数值型格式,保存为CSV文件就丢失数据。



幽助 发表于:2019-01-28 11:23:35

感谢两位版主大大的回复,因为这个CSV文件是客户指定的格式,不能修改,而且还不是个别文件时批量型的,所以没法通过修改CSV格式来达到目的。

导入完成的科学计算显示方法可以再转换为数字或者文本型吗?纠结的。。。o(╥﹏╥)o



西出阳关无故人 发表于:2019-01-28 11:45:28

把CSV的示例批量上传,研究一下。

另外,请确定导入后的字段类型(文本?长整型?双精度?...)。


或 在窗体控件中把格式设为#(是整数的情况),#.##(两位小数的情况)



幽助 发表于:2019-01-30 18:28:21

点击下载此附件

大神靠你了。想了N天,毛都要想没了。。。。。

顶你,大神。。。



西出阳关无故人 发表于:2019-01-30 21:43:00

其中一个文件,用记事本打开后,是这样:

MaterialNo,30030389,,,,,,
SupplierID,3000935,,,,,,
RawLotId,1.94232E+11,,,,,,
DeliverDate,2019/1/24,,,,,,
ManufacturingDate,2019/1/23,,,,,,
MaterialName,WALL LINER(With SVD)_SUPERE,,,,,,
  ,,,,,,,
 ... ...
Item,N,MEAN,SD,MAX,MIN,VALUE,DL
Clean_time,,,,,,44,
Particle_0.2um,2,7.39,0.19,7.52,7.25,,
CoatingThickness,8,447.63,40.77,51,396,,
SurfaceRoughness_Ra,4,74.36,3.27,78.31,70.95,,
Visual_inspection,,,,,,0,
SVD_o-ring_height,2,17,2.83,19,15,,
Wall_o-ring_thickness,4,9.75,0.15,9.92,9.57,,



西出阳关无故人 发表于:2019-01-30 21:52:49

其中我们要的数据哪一行是:

RawLotId,1.94232E+11,,,,,,

很显然,第二列就是你要的那个,即:1.94232E+11,说明是数字类型,切为科学计数法。在窗体控件中把格式设为#,得到194232000000这样的数值,后面的六位均为0。

所以,要想把获取的数据当成序列号,显然不行,必须在保存为csv文件前进行处理(设置为文本等),别无他法。



chinasa 发表于:2019-01-31 08:03:25
跟你客户谈下,看是否在导出CSV文件时,在该字段前加字符“'

幽助 发表于:2019-02-01 16:41:13

是的呢,看来只有这一法。

我实际试了一下,如果EXCEL打开编辑CSV文件的话,不改文本类型保存的话,再用写字板打开就是显示科学算法的,

如果EXCEL编辑时改成文本框保存的话,写字板打开就是纯数字了。但问题时如果期间还用EXCEL打开直接保存就又变成科学算法了。只能要求操作员打开后务必保持文本型显示后才可以了。好了,感谢各位大大的确认,特别是斑竹“西出阳关无故人”的协助。灰常感谢!



chinasa 发表于:2019-02-02 13:42:54

你在EXCEL该字段内容前加上符号' 试试看,目前我就是用这个方法解决的。



总记录:10篇  页次:1/1 9 1 :