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

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

新規登録して質問してみよう
ただいま回答率
85.46%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1368閲覧

関数を値にしたファイルを生成するには?

fdkfjah

総合スコア3

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/11 13:31

前提・実現したいこと

関数を値に置き換えたファイルを生成しようとしていますが、
うまくいきません。

該当のソースコード

python

1import openpyxl 2 3wb = openpyxl.load_workbook("sample.xlsx") 4ws = wb.worksheets[0] 5 6ws.insert_cols(1) 7ws['A1'] = '乱数' 8 9for row in ws.iter_rows(min_row=2, max_row=5): 10 row[0].value = f"=RAND()" 11 12wb.save('sample-new.xlsx') 13 14# sample-new.xlsxを値で読み込み、別名ファイルで保存しようとしたができなかった 15wb_data = openpyxl.load_workbook("sample-new.xlsx", data_only=True) 16wb_data.save('sample-data.xlsx') 17 18

全くデータが記載されていないsample.xlsxに、
RAND()で乱数をセルに登録しました。

sample-new.xlsx は下記のような状態で保存されています。
イメージ説明

このsample-new.xlsxをさらにdata_only=Trueを付加して開き、
もう一度保存しなおせば、関数ではなく値が入力されているファイルが生成されるかと思ったのですが、空白になってしまい、うまくいきません。

関数を値にしたファイルを一気に生成することはできるのでしょうか?

以上よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

excelデータを処理するpythonライブラリには、openpyxl、xlwing、win32comがあります。

openpyxlは、.xlsxファイル(これは複数のxmlファイルをzip圧縮したもの)をpythonで書き換えるライブラリです。実行するためにExcelを必要としませんが、数式の計算はできません。保存した.xlsxファイルをExcelで開いて保存すると、自動再計算をOFFにしていない限り数式が計算されて保存されます。その状態で、data_only=Trueで読み込めば計算結果は得られますが、そうしなければ計算結果を得ることはできません。

xlwingとwin32comは、Excelを起動してExcelに処理を行わせるものですので、実行するためにExcelが必要です。xlwingとwin32comであれば、Pythonから数式の計算を行わせることができます。

投稿2021/10/11 22:49

ppaul

総合スコア24666

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

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

fdkfjah

2021/10/12 00:29

xlwingもしくはwin32comで試してみます。ご丁寧な解説ありがとうございました。
guest

0

計算式を保存しただけではダメです。Excelで開いて保存して初めてその値は確定されます。

関数を値にしたファイルを一気に生成することはできるのでしょうか?

Pythonで計算した乱数の結果の値を書き込めばよいかと思います。
ただしExcelでのRAND()Pythonでの乱数計算の結果が異なることはあり得ることにご注意ください。

投稿2021/10/11 13:51

can110

総合スコア38278

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

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

fdkfjah

2021/10/12 00:28

確かに、sample-new.xlsx を一旦開いて保存した後で 最後の二行だけのプログラムを実行するとちゃんと値が反映されるんですよね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問