我正在使用 python 从 excel 中读取货币值。range.Value 方法返回的是一个我不知道如何解析的元组。
例如,单元格显示为 $548,982,但在 python 中,该值返回为 (1, 1194857614)。
如何从 excel 中获取数值或如何将此元组值转换为数值?
谢谢!
试试这个:
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 而不是两个整数元组。
我用 Excel 2007 和 VBA 试过这个。它给出了正确的值。
1) 尝试将此值粘贴到新的 Excel 工作簿中
2) 按 Alt + F11。带您进入 VBA 编辑器。
3) 按 Ctrl + G。让您进入即时窗口。
4) 在即时窗口中,键入 ?cells("a1").Value
这里“a1”是您粘贴值的单元格。
我怀疑该单元格是否具有某种价值或特征,因此它会以这种方式进行解释。
在这里发表你的观察。