我正在使用python从excel读取货币值。从range.Value方法返回的是一个我不知道如何解析的元组。
例如,单元格显示为$ 548,982,但在python中,该值返回为(1,1194857614)。
如何从excel获取数值金额或如何将此元组值转换为数值?
谢谢!
答案 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”是您粘贴值的单元格。
我怀疑这个单元格是否具有某种价值或特征,因为它是以这种方式解释的。
在此发表你的意见。