OneNote-Tabellen in Python analysieren

Microsoft OneNote ermöglicht es Benutzern, strukturierte Tabellen direkt in Seiten einzubeziehen. Diese sind ideal für Aufgabenlisten, Zeitpläne, Vergleichsmatrizen und Datenerfassungsformulare. Aspose.FOSS for Python macht es möglich, alle diese tabellerischen Daten programmatisch zu extrahieren, ohne dass eine Installation von Microsoft Office erforderlich ist.

Installieren

pip install aspose-note

Laden Sie das Dokument und finden Sie Tabellen

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

from aspose.note import Document, Table

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

Zellwerte lesen

Die Tabellen sind in einer drei-Ebene-Hierarchie aufgebaut: Table → TableRow → TableCell.Jede Zelle enthält: RichText Knoten, deren .Text gibt den reinen Textinhalt an:

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}")

Kolumnenbreiten überprüfen

Table.Columns ist eine Liste von TableColumn Gegenstände; jeder TableColumn hat eine .Width Eigenschaft, die die Spaltenbreite in Punkten gibt:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
    widths = [col.Width for col in table.Columns]
    print(f"Table {i}: {len(widths)} column(s)")
    print(f"  Widths (pts): {widths}")
    print(f"  Borders visible: {table.IsBordersVisible}")

Exportieren aller Tabellen in CSV

Konvertieren Sie alle Tabellen im Dokument in CSV-Format:

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 einen 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": [col.Width for col in table.Columns]})

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

Die erste Zeile als Überschrift 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 Tische bietet

MerkmaleUnterstützt
Table.Columns (jeweils TableColumn.Width)Ja: Spaltenbreiten in Punkten
Table.IsBordersVisible- Ja , das ist gut .
Table.TagsJa: OneNote-Tags auf Tabellen
Zelltext über RichText- Ja , das ist gut .
Zellbilder über Image- Ja , das ist gut .
Zusammengefasste Zellen (Reihe-/Spalteumfang Metadaten)Nicht in der öffentlichen API ausgesetzt
Schreiben/bearbeiten von Tabellen und speichern in .one- Nein .

Nächste Schritte