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
(以下略)
というように行と列が入れ替わります。
コメント
コメントを投稿