Home » Python » pywin32・win32comの使い方 » pywin32を使ってExcelのRange.Valueで数値を取得すると表示形式によってdecimal.Decimalに

pywin32を使ってExcelのRange.Valueで数値を取得すると表示形式によってdecimal.Decimalに

動作検証バージョン:Windows 11 Home + Python 3.10.6(64-bit) + pywin32 305 + 64bit Excel

Excel VBAのRangeオブジェクトのValueプロパティでデータを取得した場合、表示形式によってはデータ型がDoubleではなくCurrencyになることを記事にしました。

pywin32・win32com.clientを使った場合、どのようなデータ型と認識されるのかが気になります。

[スポンサードリンク]

Range.Valueで取得した数値のデータ型を確認するサンプルスクリプト

Excel VBAの場合と同様に、

B1:B5セルに数値「-1234.5」を入力してさまざまな表示形式を設定したワークシートがアクティブな状態で以下のスクリプトを実行してみました。

import win32com.client as win32

xl_app = win32.GetObject(Class='Excel.Application')
for rng in xl_app.Range('B1:B5'):
    print(
        rng.Text,
        rng.Value,
        type(rng.Value),
        sep='\t',
    )

結果は、

(1,234.50) -1234.5 <class 'float'>
▲ 1,234.50 -1234.5 <class 'float'>
(¥1,234.50) -1234.5 <class 'decimal.Decimal'>
¥-1,234.50 -1234.5 <class 'decimal.Decimal'>
¥ -1,234.50 -1234.5 <class 'decimal.Decimal'>

と出力されます。

Excel VBAでCurrencyと判定された表示形式[通貨]や[会計]は、decimal.Decimal型と判定されています。

Range.Value2で取得するとfloat

先ほどのforブロックで、以下のようにRange.Value2プロパティを使うと、

for rng in xl_app.Range('B1:B5'):
    print(
        rng.Text,
        rng.Value2,
        type(rng.Value2),
        sep='\t',
    )

以下のように出力されます。

(1,234.50) -1234.5 <class 'float'>
▲ 1,234.50 -1234.5 <class 'float'>
(¥1,234.50) -1234.5 <class 'float'>
¥-1,234.50 -1234.5 <class 'float'>
¥ -1,234.50 -1234.5 <class 'float'>

Excel VBAでRange.Vlaue2で取得したデータならDoubleと判定されるのと対応しています。

[スポンサードリンク]

Home » Python » pywin32・win32comの使い方 » pywin32を使ってExcelのRange.Valueで数値を取得すると表示形式によってdecimal.Decimalに

「pywin32・win32comの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.