Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add notes using openpyxl

everyone. I'm looking for a way to make notes in excel worksheet, using python. Found a way to add comments, but I need notes like on screenshot. Is there an easy way to add them using openpyxl or any other lib? screenshot of a note

like image 705
agas0077 Avatar asked Sep 19 '25 06:09

agas0077


2 Answers

Updating this because this post is the top google result

The openpyxl docs incorrectly refer to notes as comments. Just follow the instructions in the docs on how to add comments: https://openpyxl.readthedocs.io/en/latest/comments.html. There is one issue with their example code though in the docs, so use the below code instead:

from openpyxl import Workbook
from openpyxl.comments import Comment
wb = Workbook()
ws = wb.active
comment = Comment('This is the comment text', 'Comment Author')
ws["A1".comment] = comment
wb.save('your_file.xlsx')
like image 159
EthanMK Avatar answered Sep 20 '25 20:09

EthanMK


I've been trying to accomplish the same thing. Apparently that "note" is the same as data validation as described in the docs.

So what you do is:

from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation

wb = load_workbook('my_sheets.xlsx')

# Create 'note'
dv = DataValidation()
dv.errorTitle = 'Your note title'
dv.error = 'Your note body'

# Add 'note' to A1 in the active sheet
dv.add(wb.active['A1'])

# This is required also, or you won't see the note
wb.active.add_data_validation(dv)

wb.save('my_sheet_with_note.xlsx')

It also mentions prompts, which is something you can look into:

# Optionally set a custom prompt message
dv.promptTitle = 'List Selection'
dv.prompt = 'Please select from the list'

Edit: I updated the answer with a part of the code that solved my problem at the time:

def add_note(cell, prompt_title='', prompt=''):
    p = {
        'promptTitle': prompt_title[:32],
        'prompt': prompt[:255],
    }
    dv = DataValidation(**p)
    dv.add(cell)
    cell.parent.add_data_validation(dv)
like image 33
Menzies Avatar answered Sep 20 '25 21:09

Menzies