请选择 进入手机版 | 继续访问电脑版

LibreOffice 中文社区

 找回密码
 马上加入

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
开启左侧

[已解决] xls表格中的身份证号码和银行卡被libre误当数值呈科学计数法

[复制链接]
libreoffice_xf 发表于 2015-12-10 10:03:55 | 显示全部楼层 |阅读模式
本帖最后由 ACTom 于 2015-12-11 08:26 编辑

问题描述:
在LibreOffice Calc中,身份证号码和银行卡号码被误当数值显示为科学计数法,没有办法修改为正确的,
libre打开时显示的样子.png
但是wps和微软office打开该文件则正常,
wps打开时显示正常.png
在Wps和微软office中, 在身份证号码和银行卡号的单元格位置会多一点提示,提示可以转换成数值,但未点击转换之前还是当文本处理的,所以显示和编辑时都正常的
LibreOffice Calc则非常的聪明,就直接当成是数值了,
libre打开时显示的样子列宽拉一下的样式.png
自动转成了科学计数法,因为精度的问题后面的3位数则被改为了0,这就造成了错误,就算是转为文本也没有办法是正确的,设置单元格格式也解决不了
libre在编辑身份证号码时却被自动切换为科学计数法.png
我偿试了在LibreOffice Calc的“工具”菜单中的“选项”中没有找到关于自动转换或误别或自动替换或其它有于这个问题的相似的项,确实没有办法了
但是身份证号码有个别的末尾为字母的,则不会自动转成数值
在LibreOffice Calc中,如果要录入身份证号码或银行卡号,先录入一个单引号,再录入任何的数据都会按字符处理,但是打开已经存在的这些以字符身份证号、银行卡号的,则会自动转换成数值,
说明:这个xls是由ERP系统中导出的人员信息,每月都需要在系统中导出一个人员的列表,编辑之后再发给银行进行付款, 此前一至使用wps和微软件office则正常(早期的版本和最新的版本都正常)
重现步骤:
将附件的rar解压缩,分别用wps和libre office Calc打开,即可重现该问题
当前的行为和结果:

期望的行为和结果:
期待能增加一个选项之类可以设置关于“自动转成数据”的选项之类的,总之bug能解决,身份证号码和银行卡号可以正常显示或以编辑就行了
操作系统和软件版本:
windows 7 32位 专业版(正版)
LibreOffice 5.03
Wps 10.1
用于测试的附件(非必须):

身份证号和银行卡号显示出错的样本.rar (2.96 KB, 下载次数: 769)

点评

https://bugs.documentfoundation.org/show_bug.cgi?id=96499  发表于 2015-12-15 13:40
DOSforever 发表于 2016-1-3 16:06:13 | 显示全部楼层
说一句题外话:你这个小姑娘为了一个问题,居然把人家的身份证号和银行卡号都公之于众,实在是做事没头脑!不谨慎!我如果是领导怎敢放心让你做事!我如果是你同事怎敢与你这种人共事!

点评

单独看到一些银行卡号是没有太多用处的(也许可以根据银行卡号的开头推导出是那家银行的,但是没有办法推导出姓名吧)  发表于 2016-1-7 11:51
DOSforever,您好!非常感谢您提醒这个要保护别人隐私信息的问题! 实际上,敏感的隐私信息都已经删除了,银行卡号和身份证号码都有修改过了.....  发表于 2016-1-7 11:50
suokunlong 发表于 2015-12-15 13:41:04 | 显示全部楼层
已报告到官方:https://bugs.documentfoundation.org/show_bug.cgi?id=96499
请在官方bug tracker上注册账号并将自己添加到cc列表以监视该bug的最新状态。
开放,包容,奉献。
jmxhyz 发表于 2015-12-14 22:08:12 | 显示全部楼层
抽空看了一下源码,发现这个问题(或者BUG吧)要想等官方修正,可能会等好些日子。
原因是calc导入html文件时,是把html的style(样式)与tag(标签)的处理分开,
对style的导入只限于页面设置方面,对tag的分析才是导入数据。
然而ms-excel的数字格式却是放在“style="vnd.ms-excel.numberformat@"”上,
相反,LO-calc的数字格式是放在tag的属性上“<td sdnum="2052;0;@">”。
可见,LO-calc会忽略掉由excel所导出的html文件的所有数字格式。

由于LO-calc导入html的style和tag的源码分属两个文件,
所以要对付由style来定义的数字格式显得麻烦了。因为style既可以集中在<style>标签里,
又可以分散各个标签里。。。。
好吧,对我来说,这是件令人头痛的事情。还请用sdnum属性吧,一了百了。
我本人对c++不熟悉,看一下源码还行,这个大动作就无能为力了。会有能人解决的吧!
源码位置与文件:
{libreoffice}/sc/source/filter/html/htmlimp.cxx
{libreoffice}/sc/source/filter/html/htmlpars.cxx
jmxhyz 发表于 2015-12-14 10:58:35 | 显示全部楼层
libreoffice_xf 发表于 2015-12-14 09:51
非常感谢jmxhyz对我提出的问题进行详细的分析!
jsp导出时将单元格设定为文本,通常的做法是:
别人的系 ...

可以两种写法放在一起,各自适应:
<td style="vnd.ms-excel.numberformat:@" sdnum="2052;0;@">4100025601074122197</td>
<td style="vnd.ms-excel.numberformat:@" sdnum="2052;0;@">3506271979069223585</td>

就像现在的网页设计一样,设计师要适应IE、firefox、chrome等各种内核的浏览器。也没有说浏览器之间就一定要规则相同。事实是你们系统的技术人员并没有兼容其它办公软件的意识。
否则的话,只需要一个通用规则:在银行卡号和身份证号前加个英文单引号即可。各种办公软件都认识了。
<td>'4100025601074122197</td>
<td>'3506271979069223585</td>

这个是技术人员的系统设计问题,不是财务人员的问题。
如果你们真的需要部署libreoffice软件,就应该考虑系统设计的兼容性问题。
事实上,html文件中的各种vnd.ms-excel.numberformat,包括文本型、货币型等各种类型定义,libreoffice现在都不认。
所以,现在要部署libreoffice的话,就得按照libreoffice现在的规则来办。做出与ms兼容的两套方案(就是像现在的网页设计一样)。
suokunlong 发表于 2015-12-14 10:53:48 | 显示全部楼层
@libreoffice_xf 用你提供的excel文件到libreoffice官方bug tracker提交bug有问题吗?我看到里面涉及到身份证号和银行卡号,可能是敏感信息。

如果可能,请提供一个不涉及敏感信息的测试文件,用来进行Bug报告。
开放,包容,奉献。
jmxhyz 发表于 2015-12-11 17:56:39 | 显示全部楼层
让libreoffice不断去兼容ms的东西,不如直接用ms算了。
如果要用libreoffice,也得按照libreoffice得规范来做才行。
“vnd.ms-excel.numberformat”是明显带着ms印记东西,不认它也不能说是libreoffice的错吧。
为什么不把“vnd.ms-excel.numberformat”换成sdnum="2052;0;@"呢?

楼主的问题,可以用记事本打开该文件,
然后搜索style="vnd.ms-excel.numberformat@",
全部替换为sdnum="2052;0;@"
再用LO打开就行了。
如果能够修改该系统的源文件的话,直接把sdnum="2052;0;@"加上:
<td sdnum="2052;0;@">4100025601074367379</td>
suokunlong 发表于 2015-12-11 14:36:15 | 显示全部楼层
用文本编辑器打开该文件,会看到这是一个html文件,
<meta name="Generator" content="WPS Office ET"/> 说明是用 WPS ET 创建的

表格部分,
<td class="xl67" height="19" style='height:14.25pt;' x:str>4100025601074122197</td>
<td class="xl68" x:str>350627197809253585</td>
注意其中的x:str指定了单元格类型为文本型。

不知这个格式到底应该叫做什么格式?Excel XML? Excel HTML?
LibreOffice不能准确显示该文件,应该是由于没有该文件格式的筛选器filter,因此不能识别x:str。能在libreoffice中打开并显示为表格(尽管表格中的数值类型错误),是因为libreoffice能识别html中的<table>,将table导入后单元格类型按照默认对待。
开放,包容,奉献。
suokunlong 发表于 2015-12-11 15:04:08 | 显示全部楼层
目前对于这种格式的文件,一个变通的办法就是先将后缀改为html,然后在浏览器中打开,然后复制表格,粘贴到LibreOffice Calc中,
粘贴时注意使用选择性粘贴 - 未格式化的文本,这时会弹出“文本导入”选项界面,此时将需要的列的类型由“标准”改为“文本”即可。
import-text.png
开放,包容,奉献。
ACTom 发表于 2015-12-11 08:30:25 | 显示全部楼层
你这个文件是网页而不是xls文件啊。
 楼主| libreoffice_xf 发表于 2015-12-11 11:18:01 | 显示全部楼层
那个系统是BS构架的,导出的时候文件类型只有一个,就是xls文件,
我试了一下,将导出的文件的扩展名直接由xls改成html,用浏览器可以打开的,但是在浏览器中却无法像在office软件中那样可以修改编辑这个表格,
估计使用了网页的简单的table、tr、td,这些定义的表格,那他存文件的时候以xls为扩展名,微软Office和wps Office都可以认到这些类型的表格
微软Office和wps Office是把表格内容当字符处理,
LibreOffice Calc也可以认到这种网页形式的表格,只是作了数据类型自动匹配(自动转换)吧
建议在打开这个非标准的xls文件时,跟语言转换一样,
能否在LibreOffice增加一个是否自动转换之类的选项呢(只是我个人试想一下的办法)
ACTom,请您帮助反馈一下吧,谢谢您了!
 楼主| libreoffice_xf 发表于 2015-12-11 15:20:06 | 显示全部楼层
suokunlong 您好!
非常感谢您给予了很详细的回复!
她导出的文件中包括所有人员的信息,
因此她用WPS office打开该文档, 删除大部分人员的记录行,只保留了几行数据以重现该问题
因为有些字段非常敏感,她还将职员姓名,职员家庭地址,电话号码,等列删除掉了,只留了这两个有问题的列提供给我的
再点保存时,wps office可能写入了<meta name="Generator" content="WPS Office ET"/>
我再到文员电脑直接将导出的文件的扩展名改为html,
然后用记事本打开,将看到的代码拍照给您看一下,到时再请您帮助分析一下,好吗?
suokunlong 非常感谢您的帮助!,谢谢啦!!
 楼主| libreoffice_xf 发表于 2015-12-11 15:25:16 | 显示全部楼层
本帖最后由 libreoffice_xf 于 2015-12-11 15:26 编辑

Actom也历害呀,一看就知道是网页,我也是看您的回复,才想到是BS架构的系统,导出的可能是网页
谢谢Actom认真的查看分析我提的贴子,
向热心于我们LibreOffice的您说声谢谢,谢啦Actom!!
 楼主| libreoffice_xf 发表于 2015-12-11 15:40:59 | 显示全部楼层
本帖最后由 libreoffice_xf 于 2015-12-11 15:44 编辑

suokunlong,您好!
我将导出的文件的扩展名由xls改为html,再用记事本打开,截图给您看一下,
这个html头部是这样子的
用记事本打开此html.png
因为有非常多的内容,她不同意我直接将该文件附加到贴子里,请您谅解一下,谢谢!

请您帮助分析一下看看,谢谢啦!
 楼主| libreoffice_xf 发表于 2015-12-11 15:56:47 | 显示全部楼层
本帖最后由 libreoffice_xf 于 2015-12-11 15:58 编辑

整理之后是这样子的:
2用记事本打开此html.png
 楼主| libreoffice_xf 发表于 2015-12-11 16:08:47 | 显示全部楼层
本帖最后由 libreoffice_xf 于 2015-12-11 16:12 编辑

我在CSDN上看到的,关于文本的格式问题
http://blog.csdn.net/wtnu200/article/details/7018436
jsp导出xls脚本.png
我估计是LibreOffice Calc没将vnd.ms-excel.numberformat:@ 当文本,而是当成了数值了
还真的可能是一个bug哦
*滑块验证:
您需要登录后才可以回帖 登录 | 马上加入

本版积分规则

Archiver|手机版|小黑屋|LibreOffice 中文社区 ( 粤ICP备13080851号-4 )

GMT+8, 2021-12-8 12:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表