首页 > 解决方案 > Xlwings 以小数形式读取浮点数的范围,并截断小数

问题描述

我正在尝试使用 xlwings 从“.xlsb”文件中读取二维值范围。该范围包含一系列公式,它们返回浮点数。当我读入这些值时,它会以小数而不是浮点数的形式读入。问题是超过 4 个点的小数会被截断。例如,我在 excel 中有一个值为 0.0913495 的值,但它被读取为十进制('0.0913')。更糟糕的是,当我尝试将这些小数转换为浮点数时,我发现任何超过 4 位小数的精度都被完全忽略了。例如调用 float(Decimal('0.0913')) 返回 0.0913!

到目前为止,我已经尝试了以下方法来解决这个问题,但都没有奏效:

  1. 通过调用 decimal.getcontext().prec = 28 将精度设置为 28。我也尝试过 7、8 等。这似乎没有任何改变。
  2. 使用 .options 方法: sheet.range("myrange").options(numbers = lambda x : float(x)).value
  3. 试过“.raw_value”

具有讽刺意味的是 (2) 仍然以小数形式返回数字,就好像我的选项被忽略了一样。

这是一个问题,因为对于我的特定应用程序,我依赖于比小数点后 4 位更高的精度,但 xlwings 拒绝以超过 4 位小数的任何精度读取估计值。我该如何解决?

作为参考,我将 xlwings 0.23.0 与 Python 3.8.8 和 Excel 版本 2108(Build 14326.20238)一起使用

标签: pythonexcelxlwingsxlsb

解决方案


推荐阅读