为什么xlrd读取文本格式数字为浮点数?

时间:2018-12-21 09:09:57

标签: python excel xlrd

我正在使用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会检查错误提示?为什么不检查单元格格式,以字符串形式读取文本?

1 个答案:

答案 0 :(得分:0)

在Excel中,格式设置始终纯粹是一种修饰,并且是一种独立于单元格值存储的属性。值和格式 not 不必“同步”。

xlrd的作者选择始终 只是给您Excel存储的值。无论。从事物的xlrd方面讲,这就是整个故事。

Excel程序(即Microsoft的GUI应用程序)更加复杂。如果键入的内容看起来像是数字,则Excel将检查单元格的现有格式。如果单元格格式为“文本”,它将存储一个字符串。否则,它将存储一个浮点数。

如果从Excel中的空白表开始,则所有单元格将具有默认格式,即“常规”。最重要的是,“常规”不是“文本”,因此,如果您在该空白表的A1,A2和A3单元格中键入123,则所有这些都将存储为float。

如果您然后返回并将A1和A3设置为文本格式,则Excel会将这些单元格的 format 更改为Text。到那时,所有三个单元格的 values 仍处于浮动状态。

但是如果您随后 edit A3,Excel将检查单元格的格式,发现它是Text,然后存储一个字符串。

请注意,一旦A3的 value 是一个字符串,那么如果您将A3格式设置为General,则 value 仍然是字符串,即使General不是文字。

因此,由于Excel以及您如何输入数据,在值,类型和格式之间进行任何有趣的交易。 xlrd只是忠实地阅读其中的内容。