Cucco’s Compute Hack

コンピュータ関係の記事を書いていきます。

pythonでxlsファイルの数式をコピー(フィル)。

やりたいこと

pythonでxlsファイルの数式をコピー(フィル)。
相対参照や絶対参照ありで、参照関係をきちんと維持したままで。

コード

from openpyxl import load_workbook
from openpyxl.formula.translate import Translator
from openpyxl.utils.cell import coordinate_to_tuple

wb = load_workbook('translator.xlsx')
ws = wb["Sheet1"]

#絶対参照させる場所に値を設定
ws['G1'].value = 2

# 数式と、数式を埋め込む一番上のセルを指定。
origin_formula='=B2*C2*$G$1+1'
origin_cell="D2"
(origin_row, origin_col)= coordinate_to_tuple(origin_cell)

# originの列、2行目から一番したまで数式をフィル
# origin Cellに数式をあらかじめ埋めておく必要はない。
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=origin_col, max_col=origin_col):
    ws[row[0].coordinate]= Translator(origin_formula,origin=origin_cell).translate_formula(row[0].coordinate)
    #print(ws[row[0].coordinate].value)

wb.save('translator_done.xlsx')

結果

f:id:Cucco:20210918123027p:plain
実行前
f:id:Cucco:20210918123136p:plain
実行後