質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

34871閲覧

openpyxlで数値を取得したいです

yochun02

総合スコア76

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2019/06/16 10:49

やりたいこと

openpyxlで、数式を入出力することはできることは色んなサイトを見て参考になりましたが、数式が書かれているセルから、その計算結果の数値を取得するにはどうしたら良いでしょうか?

エクセルファイルtest.xlsxのsheet1のセルに以下のような値が入っていたとして

xlsx

1A1 = 1 2A2 = 2 3A3 = A1+A2

このときpython側で、A3セルの値を数値(この場合1+2の結果である3)として取得したいです。

現状コード

python

1import openpyxl 2sheet = openpyxl.load_workbook('test.xlsx')['sheet1'] 3 4x = sheet.cell(3,1).value 5print('x = ' + str(x))

jupyterLab

1x = A1+A2 2# x = 3 としたい

ggっても検索の仕方が悪いのか(なんて検索したらいいかわからなかった...)、見つからなかったのでわかる方ご教授ください。

pepetts1👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

一応、自己解決しました。
ファイルを開くときにdata_only=Trueと指定することで数値のみを取得することが出来るみたいでした。

python

1> openpyxl.load_workbook('file', data_only=True)

でも開く時以外でも値を数値出とったり式のままとったりできないのかなぁ...

投稿2019/06/16 11:01

編集2019/06/16 11:03
yochun02

総合スコア76

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2019/06/19 00:54

自己解決したなら、素早く質問をcloseしましょう。
guest

0

ベストアンサー

質問者さんの通りdata_only=Trueと指定することでしか数値で読み込めないみたいです。
少しでも効率化を望むなら、数式用と数値用で2つloadしておいて、状況において使い分けるくらいでしょうか。

python

1import openpyxl 2sheet1 = openpyxl.load_workbook('excel1.xlsx')['Book1'] #数式用 3sheet2 = openpyxl.load_workbook('excel1.xlsx',data_only=True)['Book1'] #数値用 4 5x1 = sheet1.cell(3,1).value 6x2 = sheet2.cell(3,1).value 7print('x1 = ' + str(x1)) 8#x1=A1+A2 9print('x2 = ' + str(x2)) 10#x2=3

関数を自作するのも考えたのですが、コード量変わらない(むしろ関数分増えている)ので微妙かな…

python

1sheet_cal = openpyxl.load_workbook('excel1.xlsx')['Book1'] 2sheet_num = openpyxl.load_workbook('excel1.xlsx',data_only=True)['Book1'] 3 4def get_value(row,column,datatype): 5 #datatypeはcal か num 6 if datatype=='cal': 7 return sheet_cal.cell(row,column).value 8 elif datatype=='num': 9 return sheet_num.cell(row,column).value 10 else: 11 raise ValueError("error!") 12 13x1 = get_value(3,1,'cal')#数式 14x2 = get_value(3,1,'num')#数値 15print('x1 = ' + str(x1)) 16#x1 = A1+A2 17print('x2 = ' + str(x2)) 18#x2 = 3

投稿2019/06/19 00:17

amahara_waya

総合スコア1029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yochun02

2019/06/26 17:08

確かに使い分けるというやり方が実用的かも知れません。 関数化は全体のコードが長くなってきて何回も読み込む可能性が出てきたら有効ですね。 わざわざありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問