【问题标题】:Why xlrd reading a text format number as a float?为什么 xlrd 将文本格式的数字读取为浮点数?
【发布时间】:2019-05-21 18:12:23
【问题描述】:

我正在使用 xlrd 处理 Excel 中的一些数据。

我在一列中有三个相同的数字数据“123”。

第一个单元格格式为Text,第二个单元格格式为General,最后一个与第一个相同。

我编辑了最后一个单元格,只是双击并没有改变任何东西。所以我在最后一个单元格中得到了错误检查提示(绿色小三角形):'此单元格中的数字格式为文本或前面有撇号。

我保存我的 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 会检查错误提示吗?为什么不检查单元格格式,将文本读取为字符串?

【问题讨论】:

    标签: python excel xlrd


    【解决方案1】:

    在 Excel 中,格式总是纯粹的装饰性的,它是一个与单元格的值分开存储的属性。值和格式必须“同步”。

    xlrd 的作者选择总是只为您提供 Excel 存储的值。无论。这就是 xlrd 方面的全部内容。

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

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

    如果您随后返回并将 A1 和 A3 格式化为文本,Excel 会将这些单元格的 格式 更改为文本。此时,所有三个单元格的 仍然是浮动的。

    但是如果你再编辑 A3,Excel会检查单元格的格式,发现是Text,从而存储了一个字符串。

    请注意,一旦 A3 的 value 是字符串,如果您随后返回并将 A3 格式化为 General,则 value 仍然是字符串,即使 General 不是文字。

    因此,由于 Excel 以及您输入数据的方式,值、类型和格式之间的任何有趣业务都会发生。 xlrd 只是忠实地阅读那里的内容。

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2023-03-21
      相关资源
      最近更新 更多