Home » Python » OpenPyXLの使い方 » OpenPyXLで数式そのものではなく結果を取得するには

OpenPyXLで数式そのものではなく結果を取得するには

動作検証バージョン:Windows 10 Pro(64-bit)+ Python 3.11.1(64-bit) + OpenPyXL 3.0.10

「python excel 数値 式をデータで取り出す」
という検索キーワードでアクセスがありました。

OpenPyXLを使ってセルのデータを取得したところ、数式の結果ではなく、数式そのものが取得されてしまった方による検索ではないかと想像しています。

引数data_onlyを指定せずOpenPyXLで既存ブックを開くと値ではなく数式が取得される

まずは、どのような現象かを確認しましょう。

Cドライブtempフォルダーのsample.xlsxブック1枚目のワークシートのC1セルに

=A1+B1

のような式を入力しておいて、以下のスクリプトを実行してください。

import openpyxl

bk = openpyxl.load_workbook(r'c:\temp\sample.xlsx')

ws = bk.worksheets[0]
cel = ws['C1']
print(cel.value)

たとえば、A1セルに「100」、B1セルに「200」が入力されていれば、「=A1+B1」の結果「300」が表示されて良さそうなものですが、そうはなりません。

'=A1+B1'

と表示されます。

「python excel 数値 式をデータで取り出す」
と検索なさった方は、結果の「300」を取得するにはどうすればいいのかを調べていらしたのだと、私は想像しています。

load_workbook()関数の引数data_onlyにTrueを指定

で、どうすればいいかというと、ブックを開くときに引数data_onlyにTrueを指定します。

先ほどのコード

bk = openpyxl.load_workbook(r'c:\temp\sample.xlsx')

を、

bk = openpyxl.load_workbook(r'c:\temp\sample.xlsx', data_only=True)

にするということです。

openpyxlx.load_workbook()関数の実体はreaderパッケージのexcel.pyモジュールにあり、以下のように定義されています。

load_workbook(
	filename, 
	read_only=False, 
	keep_vba=KEEP_VBA,
	data_only=False, 
	keep_links=True)
bk = openpyxl.load_workbook(r'c:\temp\sample.xlsx')

とした場合には、

bk = openpyxl.load_workbook(r'c:\temp\sample.xlsx', data_only=False)

として実行されているため、データではなく数式そのものが取得されるというわけです。

最終更新日時:2023-05-23 09:13

[スポンサードリンク]

Home » Python » OpenPyXLの使い方 » OpenPyXLで数式そのものではなく結果を取得するには

「OpenPyXLの使い方」の記事一覧

検索


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

.