有许多关于如何阻止Excel将文本解释为数字,或者如何使用openpyxl输出数字格式的问题,但我没有看到任何解决此问题的方法:
有人给了我一个Excel电子表格,所以我并没有创建它。当我用Excel打开文件时,我有一些值,比如“5E12”(克隆号码,如果有人在意),看起来显示正确,但每个值旁边都有一个小绿箭头警告我“这似乎是作为文本存储的数字”。然后Excel会问我是否要将其转换为数字,如果我选择是,我就会得到5000000000000,然后自动转换为科学计数法,并再次显示5E12,只有这次文本输出会显示带有零的完整数字。请注意,在转换之前,即使对于Excel而言,这确实是文本,我也只是被警告/提供转换。
因此,当使用openpyxl(从openpyxl.reader.excel导入load_workbook)读取此文件时,“5E12”会自动转换为5000000000000。我认为openpyxl做出了与Excel相同的假设,只是转换发生在没有我的提示或输入的情况下。
如何防止这种情况发生?我不想让看起来像“数字存储为文本”的文本转换为数字。除非我说了算,它们就是文本。
到目前为止,我找到的唯一解决方案是在每个单元格前面添加单引号,但这不是理想的解决方案,因为这是手动劳动而不是程序化的解决方案。此外,解决方案需要通用,因为我不总是知道这个问题可能出现在哪里(我每天读取数百万行数据,所以我不想手动处理任何东西)。
我认为这是openpyxl的问题。从2011年初开始就有一个谷歌小组讨论提到了这个问题,但假设它太罕见了而无关紧要。https://groups.google.com/forum/?fromgroups=#!topic/openpyxl-users/HZfpShMp8Tk 那么,有什么建议吗?
有人给了我一个Excel电子表格,所以我并没有创建它。当我用Excel打开文件时,我有一些值,比如“5E12”(克隆号码,如果有人在意),看起来显示正确,但每个值旁边都有一个小绿箭头警告我“这似乎是作为文本存储的数字”。然后Excel会问我是否要将其转换为数字,如果我选择是,我就会得到5000000000000,然后自动转换为科学计数法,并再次显示5E12,只有这次文本输出会显示带有零的完整数字。请注意,在转换之前,即使对于Excel而言,这确实是文本,我也只是被警告/提供转换。
因此,当使用openpyxl(从openpyxl.reader.excel导入load_workbook)读取此文件时,“5E12”会自动转换为5000000000000。我认为openpyxl做出了与Excel相同的假设,只是转换发生在没有我的提示或输入的情况下。
如何防止这种情况发生?我不想让看起来像“数字存储为文本”的文本转换为数字。除非我说了算,它们就是文本。
到目前为止,我找到的唯一解决方案是在每个单元格前面添加单引号,但这不是理想的解决方案,因为这是手动劳动而不是程序化的解决方案。此外,解决方案需要通用,因为我不总是知道这个问题可能出现在哪里(我每天读取数百万行数据,所以我不想手动处理任何东西)。
我认为这是openpyxl的问题。从2011年初开始就有一个谷歌小组讨论提到了这个问题,但假设它太罕见了而无关紧要。https://groups.google.com/forum/?fromgroups=#!topic/openpyxl-users/HZfpShMp8Tk 那么,有什么建议吗?
xlrd
,它可以读取XLS和XLSX文件,并且在保留数据类型方面更加出色。 - John Y