出展

 

 

■ライブラリ

from openpyxl.comments import Comment

■使い方

ws[セル].comment = Comment(打ちたいコメント, 記入者) 

によりコメントを記載できる。

また、お好みでコメントの大きさも変更可能だ

ws[セル].comment.width = 数字
ws[セル].comment.height = 数字

 

■セルのコメントを取得する方法

先ずはセルにコメントがあるかどうかの判定をします
# セルにコメントがあるかどうかを判定
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')