pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、行の挿入に関してです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。
Worksheet.insert_rowsメソッド
ws.insert_rows(行を挿入する位置)
このほかにもこの様なものがありました。
- ws.insert_row:行を挿入
- ws.insert_cols:列を挿入
- ws.delete_row:行を削除
- ws.delete_cols:列を削除
表の先頭から順番に行を追加(削除)していくと
追加(削除)した行数を考えながら次の位置を決めないといけず
私は挫折しました・・・。
ということで、最終行から順に行を入れていくことにしました。
上記の表だと行を挿入したい位置は「12行目」「9行目」「6行目」です。
先日勉強したWorksheet.max_row属性を使って
insert_row.py
from openpyxl import load_workbook
wb = load_workbook('〇〇地区一覧.xlsx')
ws = wb.active
num = 3
start_row = 2
rast_row = ws.max_row - ((ws.max_row - start_row - 1) % num)
print(f'データ入力最終行番号は{ws.max_row}です')
print('挿入する行番号は')
for row_no in range(rast_row, num+start_row, -num):
print(f'{row_no}')
ws.insert_rows(row_no)
wb.save('〇〇地区一覧_行挿入.xlsx')
この様な記述にしてみました。
動作確認するためにprint関数を使ってチェックします。
この辺はしらかみゅ様に教えて頂いた部分です。ありがとうございます!
insert_row.pyを実行してみると・・・
やった!ちゃんと動作してくれています。
動作確認しながらだとスムーズに記述が進みますね!ありがたい!
ちなみに、列で挿入する場合はこちらです。
insert_col.py
from openpyxl import load_workbook
wb = load_workbook('○○地区一覧_横.xlsx')
ws = wb.active
num = 2
start_column = 2
rast_column = ws.max_column - ((ws.max_column - start_column - 1) % num)
print(f'データ入力最終列番号は{ws.max_column}です')
print('挿入する列名は')
for col_no in range(rast_column, num+start_column, -num):
col_alphabet = ws.cell(row=1, column=col_no).column_letter
print(f'{col_alphabet}列')
ws.insert_cols(col_no)
wb.save('○○地区一覧_横_列挿入.xlsx')
挿入する列名が数字だと判りづらかったので表示だけアルファベット表記にしました。