#概要
前回記事で第2ステップとした「表1の対照表を使って各行に設定1/設定2を付ける」がとりあえず実装できたので纏めておく。
https://qiita.com/wellwell3176/items/7dba981b479c5933bf5f
#成果
図1に示す生データと対照表から、図2の成果の自動生成に成功
図1 左:生データ 右:対照表
図2 成果
program
import openpyxl
wb1=openpyxl.load_workbook('/content/drive/My Drive/Colab Notebooks/data3.xlsx')
ws1=wb1.active
#対照表をマスターとして別に用意しておく。マスター側からは数式では無く数値を引っ張りたいので、data_only=trueで開く
wb2=openpyxl.load_workbook('/content/drive/My Drive/Colab Notebooks/table.xlsx',data_only=True)
ws2=wb2.active
for i in range(12):
for j in range(3):
copy = ws2.cell(row = i+1, column = j+3).value
ws1.cell(row = i+1, column =j+10,value=copy)
#別ブックからの参照が上手く行かなかったので対照表を一度コピペ
#rangeはi=0から始まるが、行と列は1から始まるので調整
min_row=2
max_row=ws1.max_row #2行目から最終行まで処理を掛けるので行数取得
ws1["H1"].value="設定1"
ws1["I1"].value="設定2" #見出しは入力した方が早かった
for i in range(min_row, max_row):
ws1.cell(row=i, column=7).value ="=D{}&E{}".format(i,i)
#7列目に区分+業務を入力
ws1.cell(row=i, column=8).value ="=INDEX($J$1:$L$12,match(G{},$J$1:$J$12,0),2)".format(i)
ws1.cell(row=i, column=9).value ="=INDEX($J$1:$L$12,match(G{},$J$1:$J$12,0),3)".format(i)
#INDEXを使い、参照表と7列目を照会。結果を入力
wb1.save('/content/drive/My Drive/Colab Notebooks/data4.xlsx')
#問題点
・図2のG列J列K列L列は後工程で不要なので消したいが、参照を使ってるので消せない。
⇨強引な解決策としてdata4をdata_only=trueで開き、不要列以外を新ファイルにコピペする手はあるが、無駄な処理な気がする。
・別ブックの参照方法が分からない
今回はtable.xlsxの中身をdata4.xlsxにコピペし、それからINDEX関数を使ったが、
どう考えても最初からtable.xlsxを参照した方が良い・・・が、記述方法を見つけられず。
次回の課題とする。