• Excel的一点小事


        今天策划同学报告程序里的触发器有bug,过去看了下日志,提示数据文档配置有问题。心想问题不大,修改下表格内容就可以了,当我看完数据表后,悲催的一天开始了。。。
        我们项目模板数据使用的是json,但策划同学肯定更喜欢Excel,所以我们项目的配置文件生成流程是这样的:

    Created with Raphaël 2.1.2StartExcel转换加载json

        其中在Excel转json这步,我们将Excel文件生成json,同时自动生成配置文件类。

         当前的问题发生在Excel转json的过程中json数据丢失了,由于这个工程各个项目组都在用,我怀疑是策划同学在填表的时候有特殊符号,导致在转换的过程中出了问题。但仔细检查后并没有问题。那唯一的问题只能是Excel转json的工程有bug。查看相关代码没有看出什么嫌疑。去Google查询Excel数据丢失问题,也没得到什么好的答案。

        通过分析输出字段我发现通过转换后的字段长度都是255,无论字符串里是否包含特殊字符,排除掉特殊字符这条线索。然后将255关键字加上之后,Google立马给出了答案:

    当数据驱动从Excel读取数据的时候,会从HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet4.0EnginesExcel这个地址读取变量TypeGuessRows来决定通过读取几行来判断数据类型,如果前8行没有超过255的字段,后面都按255长度来读。

        解决方案岂不是显而易见,就是修改这个值,我们的数据表很大,所以我将TypeGuessRows修改为0,貌似世界清静了,但结果出乎意料,没有任何作用。查了非常多的文档,大家几乎都是用这种方式,包括微软官方文档。可是没有任何效果。

        最终我让策划同学在我们的表类型说明行里填充超过255的字符,来当占用符,问题解决了。
        通过这个问题,再次巩固了我对解决问题的几个认识:
    1、用别人的库确实方便,但没有源代码但出了问题只能查看文档和google能告诉你怎么办了。
    2、在遇到问题的时候,不选择优美但不确定的方案,而是采用实用的方案。
    3、合理的实用搜索引擎,只有告诉Google正确的关键字,才能得到合适的答案。

    参考资料

    [1]http://support.microsoft.com/en-us/kb/839785
    [2]http://www.dotnetthoughts.net/text-truncated-to-255-characters-when-reading-from-excel-using-oledb/

  • 相关阅读:
    Linux内核中的jiffies 以及时间的获取time
    linux2.6内核启动流程简述
    qt 显示控件 导致频闪
    V4L2应用程序框架
    linux 目标机 windows 图形界面ftp登录
    linux2.4内核启动流程简述及2410主频修改
    块设备驱动编写总结一(ZT)
    backlight misc驱动范例 及应用程序范例
    如何通过结构中的某个成员地址获取结构本身的指针???
    我是怎么招聘程序员的
  • 原文地址:https://www.cnblogs.com/fengju/p/6174288.html
Copyright © 2020-2023  润新知