PythonのopenpyxlでExcelの行と列を入れ替えてみた
今回のPythonの勉強は、Excelの行と列を入れ替えることをしてみました。
予め、都道府県とその都道府県庁所在地をリスト化したExceを用意し、そのリストの行と列を入れ替えたものを新しい別のシートに作成するというもの。
以下がExcelファイル「Example.xlsx」の中身。
Pythonのコードは以下の通り。
解説はコード内にコメントしてあります。
#openpyxlモジュールを使用する
import openpyxl
#既存のExcelファイルを開く
wb=openpyxl.load_workbook('Example.xlsx')
#既存ファイルのシートを指定
sheet1=wb['Sheet1']
#既存ファイルに新規シートをシート名と位置を指定して作成
sheet2=wb.create_sheet(title='Sheet2',index=1)
#Sheet1の値のある行数を取得
rw=sheet1.max_row
#Sheet1の値のある列数を取得
cl=sheet1.max_column
#iは値のある行数分繰り返す
#jは値のある列数分繰り返す
#range(start,stop)はstart≦i<stopでstopで指定した値は含まないので「+1」している
for i in range(1,rw+1):
for j in range(1,cl+1):
C1=sheet1.cell(row=i,column=j) #sheet1のセルの行番号と列番号を指定している
C2=sheet2.cell(row=j,column=i) #sheet1のセルの行番号と列番号を入れ替えてsheet2のセルを指定している
C2.value=C1.value #sheet2のセルにsheet1のセルの値を代入
wb.save('Example.xlsx') #上書き保存
結果は以下の通り。
最初のリストの行数は6、列数は2。つまり、
rw=sheet1.max_row=6 cl=sheet1.max_column=2
for文は、
for i in range(1,7): #1≦i<7、つまり1行目から6行目まで
for j in range(1,3): #1≦i<3、つまり1列目から2列目まで
で、i=1のとき、j=1とj=2を行います。
つまり、sheet1のA1セルの値をsheet2のA1セルに代入し、続けてsheet1のB1セルの値をsheet2のA2セルに代入しています。
i=1でj=1のとき
C1=sheet1.cell(row=1,column=1) #行番号1、列番号1、つまりA1
C2=sheet2.cell(row=1,column=1) #行番号1、列番号1、つまりA1
i=1でj=2のとき
C1=sheet1.cell(row=1,column=2) #行番号1、列番号2、つまりB1
C2=sheet2.cell(row=2,column=1) #行番号2、列番号1、つまりA2
j=2が終わるとi=2のときになり、j=1とj=2を行います。
つまり、sheet1のA2セルの値をsheet2のB1セルに代入し、続けてsheet1のB2セルの値をsheet2のB2セルに代入しています。
i=2でj=1のとき
C1=sheet1.cell(row=2,column=1) #行番号2、列番号1、つまりA2
C2=sheet2.cell(row=1,column=2) #行番号1、列番号2、つまりB1
i=2でj=2のとき
C1=sheet1.cell(row=2,column=2) #行番号2、列番号2、つまりB2
C2=sheet2.cell(row=2,column=2) #行番号2、列番号2、つまりB2
j=2が終わるとi=3のときになり、j=1とj=2を行います。
つまり、sheet1のA3セルの値をsheet2のC1セルに代入し、続けてsheet1のB3セルの値をsheet2のC2セルに代入しています。
i=3でj=1のとき
C1=sheet1.cell(row=3,column=1) #行番号3、列番号1、つまりA3
C2=sheet2.cell(row=1,column=3) #行番号1、列番号3、つまりC1
i=3でj=2のとき
C1=sheet1.cell(row=3,column=2) #行番号3、列番号2、つまりB3
C2=sheet2.cell(row=2,column=3) #行番号2、列番号3、つまりC2
(以下略)
というように行と列が入れ替わります。






コメント
コメントを投稿