解释Excel货币值

时间:2008-12-23 22:37:51

标签: python excel pywin32

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

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

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

谢谢!

2 个答案:

答案 0 :(得分: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.Decimal s而不是两个整数元组。

答案 1 :(得分:0)

我尝试使用Excel 2007和VBA。它给出了正确的价值。

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

我怀疑这个单元格是否具有某种价值或特征,因为它是以这种方式解释的。

在此发表你的意见。