私は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")
MicrosoftCOMのお金は8バイト整数です。小数点以下4桁の固定小数点です(つまり、1は10000で表されます)。私の関数は、4バイト整数のタプルを取得し、構造体を使用して8バイト整数を作成し、符号の問題を回避してから、定数10000で除算します。関数はdecimal.Decimalを使用します。それ以外の場合は、浮く。
更新(コメントに基づく):これまでのところ、2つの整数のタプルとして返されるのはCOM通貨の値のみであるため、それを確認することをお勧めしますが、これが常に成功するという保証はありません。decimal.Decimal
ただし、使用するライブラリとそのバージョンによっては、後でアップグレードした後、 2つの整数のタプルではなくsを受け取る可能性があります。
Excel 2007 と VBA で試してみました。それは正しい値を与えています。
1) この値を新しい Excel ワークブックに貼り付けてみます
2) Alt + F11 を押します。VBA エディターに移動します。
3) Ctrl + G を押します。すぐにウィンドウに移動します。
4) すぐに表示されるウィンドウで、?cells("a1") と入力します。
ここでの値 "a1" は、値を貼り付けたセルです。
セルがこのように解釈されるため、セルに何らかの値または文字があるとは思えません。
ここにあなたの観察を投稿してください。