zoukankan      html  css  js  c++  java
  • 关于csv格式保存数值型字符串遇到的问题

    在最新的工作中,遇到一个csv保存格式的问题,经过一番搜索后,特此记录下。

    问题描述

    在一个导出功能中,既有excel格式导出,也有csv格式导出,默认导出格式为excel,但上线后遇到很多版本不兼容问题,解决起来很麻烦,后面改为csv格式导出,但又遇到了新的问题,那就是保存时,会把所有的内容当做数字来解析,具体表现在这两个方面:

    1. 当保存的不是数字时,例如:"000002"、"0012306"之类的内容,实际显示的是"2"、"12306"的,前面的0丢失。
    2. 当保存为较大数值时,当超过11位后,例如:"150000000000",实际是以科学计数法显示,这里的需求是要原样保存。

    解决过程

    上面两个保存格式的问题,在保存为excel格式中有遇到过,当时的解决方法是通过设置该单元格的数值格式来解决,具体解决方法如下:

    
    // 设置数字格式化
    void COleDispatchDriver::SetNumberFormat(const VARIANT& value)
    {		
    	static BYTE params[] = VTS_VARIANT;
    	InvokeHelper(0xc1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, params, &value)	;
    } 
    
    void COleDispatchDriver::SetValue(const VARIANT& value)
    {
    	static BYTE params[] = VTS_VARIANT;
    	InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, params, &value)	;
    } 
    
    void COleDispatchDriver::GetValue()
    {
    	VARIANT result;	
    	InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);
    	return result;
    } 
    
    
    // 使用时,先把数据取出来,再对单元格进行格式设置,最后将数值设置进去。
    
    COleVariant var = GetValue();
    SetNumberFormat(COleVariant("@"));	 // 按文本格式保留
    //SetNumberFormat(COleVariant("0")); // 按整形格式保留
    //SetNumberFormat(COleVariant("0.0")); // 按1位小数保留
    SetValue(var);
    
    
    

    上述操作虽然可以解决问题,但整个过程相当于把数据取出来又重新设置一次,导出速度很慢。改为csv格式导出后,还是存在上面的问题,而csv格式本质是以逗号分隔符保存的文件,可以直接编辑,可读性很好,但通过wps之类的软件打开时,还是会遇到上面的问题,这可怎么办呢?

    网上搜索的解决办法

    下面以保存内容为 "01234" 为例子:

    方法一:保存为:"=01234'"。 《--- 测试不通过。
    方法二:在数值型字符串前加上单引号"'",即:"'01234", 测试显示是正常的,但数值前出现了单引号,如下图所示:
    csv格式导出时,丢失前导0.jpg

    双击该单元格,就显示正常了,如下图:
    csv格式导出时,显示效果.jpg

    从内容上看,前面是有"'"号,但在点击保存,会提示

    保存的文件格式含有不兼容的的功能,是否继续保存?

    点击继续保存后又恢复原样。

    方法三:使用内置函数实现转换,实际保存为"=T("01234")"。该种方法也可以实现类似方法三的效果。

    方法四:前面增加等号,即保存为: ="01234"。打开后的效果完美,

    综合上面四种方法,推荐使用方法四。

    小结

    csv格式无法数值型字符串前面0的问题,可通过在保存时,加上等号,外加双引号包括来达到效果,即 ="XXXX"形式。

    在导出时,excel有最大行数限制,而csv没有。

    作者:浩天之家
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    Top
    收藏
    关注
    评论
  • 相关阅读:
    Jquery实现Gridview全选功能
    SQL Server日期计算
    避免表格table被撑开变形的CSS代码实例
    oracle游标使用
    最短路径算法及应用
    Jquery实现GridView隔行变色,鼠标经过变色,单击或者选中变色
    【项目】项目109
    【项目】项目107
    【项目】项目111
    【项目】项目110
  • 原文地址:https://www.cnblogs.com/cherishui/p/15330219.html
Copyright © 2011-2022 走看看