1

我正在使用 python 从 excel 中读取货币值。range.Value 方法返回的是一个我不知道如何解析的元组。

例如,单元格显示为 $548,982,但在 python 中,该值返回为 (1, 1194857614)。

如何从 excel 中获取数值或如何将此元组值转换为数值?

谢谢!

4

2 回答 2

3

试试这个:

import struct
try: import decimal
except ImportError:
    divisor= 10000.0
else:
    divisor= decimal.Decimal(10000)

def xl_money(i1, i2):
    byte8= struct.unpack(">q", struct.pack(">ii", i1, i2))[0]
    return byte8 / divisor

>>> xl_money(1, 1194857614)
Decimal("548982.491")

Microsoft COM 中的 Money 是一个 8 字节的整数;它是定点,有 4 位小数(即 1 用 10000 表示)。我的函数的作用是获取 4 字节整数的元组,使用 struct 生成一个 8 字节整数以避免任何符号问题,然后除以常量 10000。如果可用,该函数使用 decimal.Decimal,否则使用漂浮。

更新(基于评论):到目前为止,只有 COM 货币值作为两个整数元组返回,因此您可能需要检查这一点,但不能保证这将始终成功。但是,根据您使用的库及其版本,很可能稍后,在一些升级之后,您将收到decimal.Decimals 而不是两个整数元组。

于 2008-12-24T09:19:13.747 回答
0

我用 Excel 2007 和 VBA 试过这个。它给出了正确的值。

1) 尝试将此值粘贴到新的 Excel 工作簿中
2) 按 Alt + F11。带您进入 VBA 编辑器。
3) 按 Ctrl + G。让您进入即时窗口。
4) 在即时窗口中,键入 ?cells("a1").Value
这里“a1”是您粘贴值的单元格。

我怀疑该单元格是否具有某种价值或特征,因此它会以这种方式进行解释。

在这里发表你的观察。

于 2008-12-23T22:54:07.177 回答