OneNote-Tabellen in Python parsen

Microsoft OneNote ermöglicht es Benutzern, strukturierte Tabellen direkt in Seiten einzubetten, ideal für Aufgabenlisten, Zeitpläne, Vergleichsmatrizen und Datenerfassungsformulare. Aspose.Note FOSS für Python macht es möglich, all diese tabellarischen Daten programmgesteuert zu extrahieren, ohne dass eine Microsoft Office-Installation erforderlich ist.

Installation

pip install aspose-note

Dokument laden und Tabellen finden

GetChildNodes(Table) führt eine rekursive Suche über das gesamte Dokument durch und gibt jede Tabelle als ein Table Objekt:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")

Zellwerte lesen

Tabellen folgen einer dreistufigen Hierarchie: Table → TableRow → TableCell. Jede Zelle enthält RichText Knoten, deren .Text liefert den Klartextinhalt:

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")

for t_num, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"\nTable {t_num}:")
    for r_num, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cells = row.GetChildNodes(TableCell)
        row_values = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"  Row {r_num}: {row_values}")

Spaltenbreiten prüfen

Table.ColumnWidths gibt die gespeicherte Breite jeder Spalte in Punkten zurück:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"Table {i}: {len(table.ColumnWidths)} column(s)")
    print(f"  Widths (pts): {table.ColumnWidths}")
    print(f"  Borders visible: {table.BordersVisible}")

Alle Tabellen nach CSV exportieren

Jede Tabelle im Dokument in das CSV-Format konvertieren:

import csv, io
from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")
output = io.StringIO()
writer = csv.writer(output)

for table in doc.GetChildNodes(Table):
    for row in table.GetChildNodes(TableRow):
        values = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in row.GetChildNodes(TableCell)
        ]
        writer.writerow(values)
    writer.writerow([])   # blank row between tables

with open("tables.csv", "w", encoding="utf-8", newline="") as f:
    f.write(output.getvalue())

print("Saved tables.csv")

Tabellen in ein Python-Dict / JSON exportieren

import json
from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")
result = []

for table in doc.GetChildNodes(Table):
    rows = []
    for row in table.GetChildNodes(TableRow):
        cells = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in row.GetChildNodes(TableCell)
        ]
        rows.append(cells)
    result.append({"rows": rows, "column_widths": table.ColumnWidths})

print(json.dumps(result, indent=2))

Erste Zeile als Header verwenden

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")

for table in doc.GetChildNodes(Table):
    rows = table.GetChildNodes(TableRow)
    if not rows:
        continue

    def row_text(row):
        return [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in row.GetChildNodes(TableCell)
        ]

    headers = row_text(rows[0])
    print("Headers:", headers)
    for row in rows[1:]:
        record = dict(zip(headers, row_text(row)))
        print("  Record:", record)

Was die Bibliothek für Tabellen unterstützt

FunktionUnterstützt
Table.ColumnWidthsJa: Spaltenbreiten in Punkten
Table.BordersVisibleJa
Table.TagsJa: OneNote-Tags in Tabellen
Zelltext über RichTextJa
Zellbilder über ImageJa
Zusammengeführte Zellen (rowspan/colspan-Metadaten)Nicht in öffentlicher API verfügbar
Tabellen schreiben/bearbeiten und speichern in .oneNein

Nächste Schritte