pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、セルのコメントに関してです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。
上記のような各コメントを一覧で残しておきたいとします。
セルのコメントを取得する方法
先ずはセルにコメントがあるかどうかの判定をします
# セルにコメントがあるかどうかを判定
cell.comment
# コメントがない場合
--> None
コメントがあったら、下記のように取得します。
# コメントのテキストを取得
cell.comment.text
# コメントの作成者を取得
cell.comment.aouther
コメントを挿入することもできます。
# コメントのテキストを取得
cell.comment = Comment(コメントのテキスト,コメントの作成者)
コメントが挿入されている番地を取得する事も出来ます。
# コメントが挿入されているセル番地を取得
cell.coordinate
Worksheet.iter_rowsメソッド
今回はセルの1行目から順にコメントの有無を調べたいので、
Worksheet.iter_rowsメソッドを使用しました。
ws.iter_rows(min_row=最小の行番号,max_row=最大の行番号,
min_col=最小の列番号,max_col=最大の列番号)
max_rowなどの引数を省略するとデータが入っている最大の位置まで取得してくれます。
ちなみに、rowsがあったら、colsもやっぱりあって
ws.iter_cols(min_col=最小の列番号,max_col=最大の列番号,
min_row=最小の行番号,max_row=最大の行番号)
こちらで、列単位で順に取得してくれます。
これらをふまえて
read_comment.py
from openpyxl import load_workbook, Workbook
from openpyxl.comments import Comment
wb_new = Workbook()
ws_new = wb_new.active
ws_new.title = '説明一覧'
wb = load_workbook('日報.xlsx')
ws = wb.active
ws_new['B2'] = '説明内容'
ws_new['C2'] = '記入者'
ws_new['D2'] = 'セル番地'
ws_new.column_dimensions['B'].width = 40
row_count = ws_new.max_row
print(f'新規作成したシートの行数は{row_count}です。')
for row in ws.iter_rows(min_row=1):
for cell in row:
if cell.comment is None:
continue
row_count = row_count + 1
ws_new[f'B{row_count}'] = cell.comment.text
ws_new[f'C{row_count}'] = cell.comment.author
ws_new[f'D{row_count}'] = cell.coordinate
ws_new['D2'].comment = Comment('説明があったセル番号', 'hogehoge')
wb_new.save('説明一覧.xlsx')
こんな感じで記述してみました。
個人的にはコメント取得よりも、Worksheet.iter_rowsメソッドの方が勉強になりました。