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")

MicrosoftCOMのお金は8バイト整数です。小数点以下4桁の固定小数点です(つまり、1は10000で表されます)。私の関数は、4バイト整数のタプルを取得し、構造体を使用して8バイト整数を作成し、符号の問題を回避してから、定数10000で除算します。関数はdecimal.Decimalを使用します。それ以外の場合は、浮く。

更新(コメントに基づく):これまでのところ、2つの整数のタプルとして返されるのはCOM通貨の値のみであるため、それを確認することをお勧めしますが、これが常に成功するという保証はありません。decimal.Decimalただし、使用するライブラリとそのバージョンによっては、後でアップグレードした後、 2つの整数のタプルではなくsを受け取る可能性があります。

于 2008-12-24T09:19:13.747 に答える
0

Excel 2007 と VBA で試してみました。それは正しい値を与えています。

1) この値を新しい Excel ワークブックに貼り付けてみます
2) Alt + F11 を押します。VBA エディターに移動します。
3) Ctrl + G を押します。すぐにウィンドウに移動します。
4) すぐに表示されるウィンドウで、?cells("a1") と入力します。
ここでの値 "a1" は、値を貼り付けたセルです。

セルがこのように解釈されるため、セルに何らかの値または文字があるとは思えません。

ここにあなたの観察を投稿してください。

于 2008-12-23T22:54:07.177 に答える