2025-12-18

python openpyxl は自動計算ができない! (TдT)

openpyxl でセルに値を入れ、

他のセルには、openpyxl で入れるセルを参照して計算した結果が入るようにして、

さらにそのセルの計算結果を openpyxl で読み込んで処理するようにしていた (´・ω・`)


何度見ても何度試しても期待通りに動かない!!

 

 

よくよく調べてみると

エクセルの計算式は評価され、計算結果が保存されるタイミングがあるみたいで

 

openpyxl は保存されている計算結果を参照するから

openpyxl で入れた値を使って再計算されないことがわかった

 

くそぅ (´;ω;`)

 

 

何か方法はないかなと…

 

調べてみると xlwings, pyxlsb, win32com ではできそうな情報がありました (・・;)

 

まず、xlwings を試すも再計算されたり、されなかったり、

何がなんやらわからんちーな状態で1時間を浪費 (TдT)

 

どうしたらいいやら・・・



次に xlwings で解決できないかな、と試してみました (・∀・)ノシ

 

 

結論は 「できました!!」 ですが、小手先の対応感があります (・・;)

 

コードは以下、これを再計算させたいタイミングで実行しました (;´・ω・)

with xw.App(visible=False) as app:
    wb = app.books.open(path)
    wb.app.calculate()

    ws = wb.sheets[toolname]
    val = ws.range(1, 1).value
    ws.range(1, 1).value = " "
    ws.range(1, 1).value = val

    wb.save()
    wb.close()

 

見る人が見たらすぐわかると思いますが・・・

 

xlwings でエクセルをひらいて、計算をするための API をぶったたいた後、

A1 セルの値を一時退避、" " を書き込んだ後、元に戻して、保存・終了するっていう謎処理をしています (;^ω^)

 

ChatGPT さんも Copilot さんも上記の wb.app.calcutate() とか、なんやらほかにも紹介してくれたけど

動いたり・・・ 動かなかったり・・・ 試すたびに何か動きが違う・・・

 

バタついていました

 

 

結局、前述のような処理にすることで確実に再計算が行われるようになりました ('ω')v

 

 

強引だな・・・ と思いますが、Windows ってそういうところあるよね・・・ ということにして、

この件はこれで終了としようかな、と思っています ('ω')ノ

 

 

「これが本当に正しい対応の仕方だ!!」 をご存知の方、いらっしゃいましたら、ぜひご教授くださいませ m(_ _)m

0 件のコメント:

コメントを投稿

ご訪問をありがとうございます ✨✨✨

八百茄子 は ソフトウェアエンジニア1名による小さな工房です 週末に スキルアップ と 八百茄子 向けのコンテンツ作成に勤しんでおります ご提供コンテンツ tools  にて 八百茄子 の作成したツールをご紹介しています knowhow  にて、 2x年の組込み系ソフトウェア開発...