LoginSignup
0
1

More than 3 years have passed since last update.

備忘録(openpyxlで①別ブックからのコピペ②対照表の参照)

Last updated at Posted at 2020-09-26

概要

前回記事で第2ステップとした「表1の対照表を使って各行に設定1/設定2を付ける」がとりあえず実装できたので纏めておく。
https://qiita.com/wellwell3176/items/7dba981b479c5933bf5f

成果

図1に示す生データと対照表から、図2の成果の自動生成に成功
image.png
                    図1 左:生データ 右:対照表
image.png
                         図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を参照した方が良い・・・が、記述方法を見つけられず。
 次回の課題とする。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1