我正在用xlrd处理Excel中的一些数据。
我有三个相同的数字数据'123‘在一列。
第一个单元格格式化为文本,第二个单元格格式化为常规单元格,最后一个单元格与第一个单元格相同。
我编辑了最后一个单元格,只是双击,没有改变任何东西。因此,我在最后一个单元格中得到了错误检查提示(小绿色三角形):“这个单元格中的数字被格式化为文本或前面有一个撇号。
我保存excel文件并运行代码:
excel = xlrd.open_workbook(MyExcelName)
for sheet in excel.sheets():
for i in range(sheet.nrows):
for jin range(len(sheet.row_values(i))):
value=str(sheet.row_values(i)[j])
print(value)
...
我明白了:
123.0
123.0
123
它意味着文本格式的xlrd读取数字作为浮点数。
但令我困惑的是,第三个细胞没有读成浮子。
这是怎么发生的?我的意思是,它全部格式化为文本,xlrd将检查错误提示?为什么它不检查单元格格式,将文本读为字符串?
发布于 2018-12-21 07:00:40
格式设置在Excel中始终是简单的修饰,它是一个单独存储的属性,与单元格的值无关。值和格式不必“同步”。
xlrd的作者选择始终只给出Excel存储的值。不管发生什么。这就是事情的第三方面的全部故事。
Excel程序(即Microsoft的GUI应用程序)更复杂。如果您键入的东西看起来可能是一个数字,那么Excel将检查单元格的现有格式。如果单元格格式是文本,它将存储一个字符串。否则,它将存储一个浮点数。
如果从Excel中的空白工作表开始,则所有单元格都将具有默认格式,即通用格式。关键的是,General不是文本,所以如果在空白表上输入123
单元格A1、A2和A3,它们都将被存储为浮点数。
如果然后返回并将A1和A3格式化为文本,Excel将将这些单元格的格式更改为文本。此时,这三个单元格的值仍然是浮动的。
但是,如果然后编辑A3,Excel将检查单元格的格式,发现它是文本,从而存储一个字符串。
注意,一旦A3的值是字符串,如果返回并将A3格式化为General,则该值将保持为字符串,即使General不是文本。
因此,由于Excel和输入数据的方式,在值、类型和格式之间发生了任何有趣的事情。xlrd只是忠实地阅读那里的内容。
https://stackoverflow.com/questions/53881948
复制相似问题