Как просматривать теги OneNote в Python

Как просматривать теги OneNote в Python

OneNote позволяет пользователям аннотировать контент цветными метками: звёздочки, флажки, важные пометки и пользовательские метки. Aspose.Note FOSS for Python раскрывает эти аннотации как NoteTag объекты на узлах RichText, Image, AttachedFile и Table через их свойство .Tags. Это руководство показывает, как их читать.


Пошаговое руководство

Шаг 1: Установите Aspose.Note FOSS для Python

pip install aspose-note

Шаг 2: Загрузить файл .one

from aspose.note import Document

doc = Document("TaggedNotes.one")
print(f"Pages: {len(list(doc))}")

Шаг 3: Найти теги в узлах RichText

Большинство тегов привязаны к текстовым блокам:

from aspose.note import Document, RichText

doc = Document("TaggedNotes.one")
for rt in doc.GetChildNodes(RichText):
    for tag in rt.Tags:
        print(f"[RichText] Label={tag.Label!r}  Icon={tag.Icon}  text={rt.Text.strip()!r}")

Шаг 4: Поиск тегов на изображениях

from aspose.note import Document, Image

doc = Document("TaggedNotes.one")
for img in doc.GetChildNodes(Image):
    for tag in img.Tags:
        print(f"[Image] Label={tag.Label!r}  filename={img.FileName!r}")

Шаг 5: Поиск тегов в таблицах

from aspose.note import Document, Table

doc = Document("TaggedNotes.one")
for table in doc.GetChildNodes(Table):
    for tag in table.Tags:
        print(f"[Table] Label={tag.Label!r}  widths={[col.Width for col in table.Columns]}")

Шаг 6: Сбор всех тегов по всему документу

from aspose.note import Document, RichText, Image, Table

doc = Document("TaggedNotes.one")
all_tags = []

for rt in doc.GetChildNodes(RichText):
    for tag in rt.Tags:
        all_tags.append({"type": "RichText", "Label": tag.Label,
                         "CompletedTime": tag.CompletedTime, "text": rt.Text.strip()})
for img in doc.GetChildNodes(Image):
    for tag in img.Tags:
        all_tags.append({"type": "Image", "Label": tag.Label,
                         "CompletedTime": tag.CompletedTime, "file": img.FileName})
for table in doc.GetChildNodes(Table):
    for tag in table.Tags:
        all_tags.append({"type": "Table", "Label": tag.Label,
                         "CompletedTime": tag.CompletedTime})

print(f"Total tagged items: {len(all_tags)}")
for item in all_tags:
    print(item)

Справка по свойству NoteTag

PropertyTypeDescription
Iconint | NoneЧисловой идентификатор формы тега (звезда, флажок, стрелка и т.д.)
Labelstr | NoneЧитаемая строка метки (например, "Important", "To Do")
FontColorint | NoneЦвет текста в виде целого ARGB
Highlightint | NoneЦвет выделения в виде целого ARGB
CreationTimedatetime | NoneВремя создания тега
CompletedTimedatetime | NoneВремя завершения тега (None, если не завершён)
StatusTagStatusTagStatus.Completed, если завершён, иначе TagStatus.Open

Фильтр завершённых и ожидающих тегов

Теги, которые были отмечены (например, флажки «To Do»), имеют поле non-None CompletedTime:

from aspose.note import Document, RichText

doc = Document("TaggedNotes.one")
pending, done = [], []

for rt in doc.GetChildNodes(RichText):
    for tag in rt.Tags:
        item = {"Label": tag.Label, "text": rt.Text.strip()}
        if tag.CompletedTime is None:
            pending.append(item)
        else:
            done.append(item)

print(f"Pending: {len(pending)}  Done: {len(done)}")
for p in pending:
    print(f"  [ ] {p['Label']}: {p['text']!r}")
for d in done:
    print(f"  [x] {d['Label']}: {d['text']!r}")

Создать NoteTag (в памяти)

Фабричный метод NoteTag.CreateYellowStar() создает узел тега, который вы можете прикрепить к новому содержимому в памяти:

from aspose.note import NoteTag

tag = NoteTag.CreateYellowStar()
print(f"Created tag: Icon={tag.Icon}  Label={tag.Label!r}")

Создание в памяти полезно для совместимости API. Поскольку запись обратно в .one не поддерживается, созданные теги нельзя сохранить в файл.


Распространённые проблемы

Теги не найдены (документ возвращает пустые списки Tags): Не все файлы .one содержат теги. Убедитесь, что в исходном документе теги видимы в Microsoft OneNote, прежде чем устранять проблему в коде.

tag.Label — пустая строка: Некоторые формы тегов не имеют текстовой метки в метаданных файла. Используйте tag.Icon для программного определения типа тега.


Связанные ресурсы:

 Русский