无法从桌面上看到的excel中读取数据

2021-01-28 06:54:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究excel workbook。我正在使用python脚本对workbook进行操作。但有两个问题:

1)有些细胞有integer值。当我读取这些值并将读取的值放入报表文件(.txt)时,它会在.0后面加上数字。如果有值6,当它不应该这样做时,它给出6.0。我读到excel中没有integer这样的东西。不过,我有1000个参数,因此,我不能使用某个python函数将所有参数直接转换为integer,因为这可能也会转换实际上是float的值。

2)当我读boolean真与假时,它给出的是1和0。我想在桌面上的excel工作簿中得到任何text的内容。我不想要这样的转换。

我正在使用xlrd来执行excel操作中的python
请告诉我该怎么解决这个问题?
注意:我的excel工作表包含100多个工作表,我不能用“1和0”等修改“真或假”

2条回答
网友
1楼 ·

xlrd将所有数字作为浮点数,布尔值作为整数。如何将它们打印出来纯粹是一个python问题。在

你已经知道哪些单元格包含布尔值。(如果不这样做,请检查单元格的ctype,如Massimo Fuccillo的answer中所示,有关详细信息,请参阅@JohnY的评论。)只需打印True和{},只需打印bool(var),而不是{}:

>>> var = 1
>>> print bool(var)
True

当写入一个文件时,它将作为字符串'True'(resp。'False'),如预期。在

由于Excel不区分整数和浮点,我们假设integer表示小数部分为零的任何数字。当python打印一个float时,它添加.0来保存它是一个float的信息。在

如果用“%g”格式化输出的数字,则最简单的解决方案是取消此选项:

^{pr2}$

但是,"%g"默认情况下会将实数舍入为六个有效数字(尽管可以指定不同的精度)。在

>>> "%g" % 2500.03
'2500.03'
>>> "%g" % 2500.003
'2500'

因此,如果您自己检测积分值,并相应地打印出来,则更安全:

if int(var) == var:
    print int(var)
else:
    print var

我建议这样做。在

网友
2楼 ·

对于布尔问题,您可以测试ctype:

for rx in range(ws.nrows):
        for cx in range(ws.ncols):
            print ws.cell(rx,cx).value, ws.cell(rx,cx).ctype

如果excel原始单元格为“真”为“假”,则ctype值为4

相关问题