前の記事「【OpenPyXl】Tutorial:Create a Workbok」でOpenPyXlを使用して作成した下記掲載のExcelファイル「Creatte_a_workbook.xls」を読み込んで内容修正するサンプルプログラム「Fix_the_workbook.py」を作成してみました。
修正前のExcelファイル「Creatte_a_workbook.xls」
- OpenPyXlを使用したプログラムで新規作成した’myws_2′, ‘myws_0’, ‘myws_3’, ‘myws_1’という名前の4枚のシートがあるブックで、各シートの1’A1’セルに説明文が入っています。
修正後のExcelファイル「Creatte_a_workbook.xls」
- 修正前のExcelファイルに以下の処理を行って作成しました。
- ①myws_0シートを削除しました
- ②myws_1シートを先頭に移動しました
- ③各シートのセルに実施内容を書き込みました
- ↓ 下記のハイパーリンク作成も行いました ↓
- myws_1へ移動
- myws_2へ移動
- myws_3へ移動
- ④シートセルのサイズ調整を行いました
- ⑤シートセルの表示位置調整を行いました
「Tutorial:Fix_the_workbook」の自作サンプルプログラム (「Fix_the_workbook.py」)
上記の処理を行ったサンプルプログラムを以下に記載します。
- 「Fix_the_workbook.py」
from openpyxl import load_workbook from openpyxl.styles.alignment import Alignment load_filename = 'Creatte_a_workbook.xlsx' wb = load_workbook(filename = load_filename) # シートの配列順を表示 print(wb.sheetnames) # ['myws_2', 'myws_0', 'myws_3', 'myws_1'] # シートを変数に格納 myws_2 = wb.worksheets[0] myws_0 = wb.worksheets[1] myws_3 = wb.worksheets[2] myws_1 = wb.worksheets[3] # 'myws_0'シートを削除 wb.remove(myws_0) print(wb.sheetnames) # ['myws_2', 'myws_3', 'myws_1'] # シートを変数に再格納 myws_2 = wb.worksheets[0] myws_3 = wb.worksheets[1] myws_1 = wb.worksheets[2] # 'myws_1'シートを先頭「offset=-2」に移動 wb.move_sheet(myws_1,offset=-2) print(wb.sheetnames) # ['myws_1', 'myws_2', 'myws_3'] myws_1 = wb.worksheets[0] myws_2 = wb.worksheets[1] myws_3 = wb.worksheets[2] # 全シートのセルに【今回の修正内容】を書き込む for ws in wb.worksheets: print(ws.title) # セルに書き込み ws['A3'] = '【サンプルプログラムの実施内容】' ws['A4'] = '-------------------------------' ws['A5'] = '①' ws['B5'] = 'myws_0シートを削除しました' ws['A6'] = '②' ws['B6'] = 'myws_1シートを先頭に移動しました' ws['A7'] = '③' ws['B7'] = '各シートのセルに実施内容を書き込みました' ws['B8'] = '↓ 下記のハイパーリンク作成も行いました ↓' # ハイパーリンクの作成 if ws.title=='myws_1': ws['A9'] = '*' else: ws['A9'] = '' ws['B9'] = '=HYPERLINK(”#myws_1!B9”,”myws_1へ移動”)' if ws.title=='myws_2': ws['A10'] = '*' else: ws['A10'] = '' ws['B10'] = '=HYPERLINK(”#myws_2!B10”,”myws_2へ移動”)' if ws.title=='myws_3': ws['A11'] = '*' else: ws['A11'] = '' ws['B11'] = '=HYPERLINK(”#myws_3!B11”,”myws_3へ移動”)' ws['A12'] = '④' ws['B12'] = 'シートセルのサイズ調整を行いました' ws['A13'] = '⑤' ws['B13'] = 'シートセルの表示位置調整を行いました' # シートセルのサイズ調整 # 列幅の変更 for col_no in range(ord('A'),ord('Z')+1): ws.column_dimensions[chr(col_no)].width = 5 # 行高さの変更 for row_no in range(1,15): ws.row_dimensions[row_no].height = 21 # シートセルの表示位置調整 # シートセル全体の水平方向を左寄せ、高さ方向を中央揃え for col in ws: for cell in col: cell.alignment = Alignment(horizontal='left',vertical='center') # シートセル範囲'A5:A15'の水平方向を右寄せ、高さ方向を中央揃え for row in ws['A5:A15']: for cell in row: cell.alignment = Alignment(horizontal='right',vertical='center') # 修正したファイルを別名で保存 save_filename = 'Fixed_Workbook.xlsx' wb.save(filename = save_filename) wb.close()
サンプルプログラム作成で得られた知見
- OpenPyXLを用いて既存のエクセルファイルを読み込む場合は、「load_workbook」を指定してインポートする。
from openpyxl import load_workbook
- シートセルの表示位置調整を行うためには、「Alignment」関数をインポートする。
from openpyxl.styles.alignment import Alignment
- 既存ファイル「Creatte_a_workbook.xlsx’」は、Workbookクラスのload_workbookメソッドにExcelファイル(PATH含む)を指定して Workbookオブジェクト(wb)を取得する。
load_filename = 'Creatte_a_workbook.xlsx' wb = load_workbook(filename = load_filename)
- Workbookオブジェクト(wb)のシート削除は、Workbookクラスのremoveメソッドにシート名を指定して行う。
wb.remove(myws_0)
- Workbookオブジェクト(wb)のシート移動は、Workbookクラスmove_sheetメソッドにワークシート名とオフセット値を指定して行う。
wb.move_sheet(myws_1,offset=-2)
- 以下の「for文」でWorkbookオブジェクト(wb)内にある全てのワークシートオブジェクト(ws)が取得できる。
for ws in wb.worksheets:
- セルにExcelのHYPERLINK関数を書き込んで、別ワークシートへのリンクが作成できる。
ws['B9'] = '=HYPERLINK(”#myws_1!B9”,”myws_1へ移動”)'
- 以下の「for文」で、列範囲(例ではAからZ列)を指定してワークシート列幅の変更ができる。
for col_no in range(ord('A'),ord('Z')+1): ws.column_dimensions[chr(col_no)].width = 5
- 以下の「for文」で、行範囲(例では1行から14行)を指定してワークシート行高さの変更ができる。
for row_no in range(1,15): ws.row_dimensions[row_no].height = 21
- 以下の「for文」で、ワークシートセル全体の表示位置調整ができる。
from openpyxl.styles.alignment import Alignment : for col in ws: for cell in col: cell.alignment = Alignment(horizontal='left',vertical='center')
- 以下の「for文」で、ワークシートセル範囲(以下では’A5:A15’)の表示位置調整ができる。
for row in ws['A5:A15']:from openpyxl.styles.alignment import Alignment : for cell in row: cell.alignment = Alignment(horizontal='right',vertical='center')
- 修正したExcelファイルは、Workbookクラスのsaveメソッドにファイル名を指定して別名でファイル保存ができる。
save_filename = 'Fixed_Workbook.xlsx' wb.save(filename = save_filename)
コメント