Wie man Tabellen in OneNote-Dateien mit Python parst
Microsoft OneNote ermöglicht es Benutzern, strukturierte Datentabellen direkt in Seiten einzubetten. Aspose.Note FOSS for Python stellt jede Tabelle über eine Table → TableRow → TableCell‑Hierarchie bereit und gewährt Ihnen programmatischen Zugriff auf alle Zellinhalte, Spaltenmetadaten und Tabellentags.
Vorteile
- Strukturierter Zugriff: Zeilen‑ und Spaltenanzahl, einzelner Zelleninhalt, Spaltenbreiten
- Keine Tabellenkalkulations‑App erforderlich: Tabellendaten aus OneNote auf jeder Plattform extrahieren
- Kostenlos und Open‑Source: MIT license, kein API‑Schlüssel
Schritt-für-Schritt-Anleitung
Schritt 1: Installieren Sie Aspose.Note FOSS für Python
pip install aspose-noteSchritt 2: Laden Sie die .one-Datei
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Schritt 3: Alle Tabellen finden
Verwenden Sie GetChildNodes(Table), um jede Tabelle aus dem gesamten Dokument rekursiv abzurufen:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Schritt 4: Zeilen- und Zellenwerte lesen
Iterieren Sie TableRow und TableCell Knoten. Jede Zelle enthält RichText Knoten, deren .Text‑Eigenschaft den reinen Textinhalt liefert:
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
for t, table in enumerate(doc.GetChildNodes(Table), start=1):
print(f"\nTable {t}: {len(table.Columns)} column(s)")
for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
cell_values = []
for cell in row.GetChildNodes(TableCell):
text = " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
cell_values.append(text)
print(f" Row {r}: {cell_values}")Schritt 5: Spaltenbreiten lesen
from aspose.note import Document, Table
doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
print(f"Table {i} column widths (pts): {[col.Width for col in table.Columns]}")
print(f"Borders visible: {table.IsBordersVisible}")Schritt 6: Exportieren nach CSV
import csv, io
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
buf = io.StringIO()
writer = csv.writer(buf)
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(buf.getvalue())
print("Saved tables.csv")Häufige Probleme und Lösungen
Tabellen erscheinen leer
Ursache: Die Zellen enthalten Image Knoten statt RichText Knoten.
Prüfen:
from aspose.note import Document, Table, TableRow, TableCell, RichText, Image
doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
for row in table.GetChildNodes(TableRow):
for cell in row.GetChildNodes(TableCell):
texts = cell.GetChildNodes(RichText)
images = cell.GetChildNodes(Image)
print(f" Cell: {len(texts)} text(s), {len(images)} image(s)")Spaltenanzahl stimmt nicht überein Columns
table.Columns spiegelt die im Dokument gespeicherten Spaltenmetadaten wider. Die tatsächliche Anzahl von Zellen pro Zeile kann abweichen, wenn Zeilen zusammengeführte Zellen enthalten (das Dateiformat speichert dies auf Binärebene; die öffentliche API stellt kein Zusammenführungs‑Flag bereit).
ImportError: Kein Modul mit dem Namen ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentHäufig gestellte Fragen
Kann ich Tabellendaten bearbeiten und zurück speichern? Nein. Das Zurückschreiben in das .one-Format wird nicht unterstützt. Änderungen, die im Speicher vorgenommen wurden (z. B. über RichText.Replace()), können nicht in die Quelldatei übernommen werden.
Werden zusammengeführte Zellen erkannt? Die CompositeNode API stellt keine Merge-Metadaten bereit. Jede TableCell wird als separate Zelle behandelt, unabhängig von der visuellen Zusammenführung.
Kann ich zählen, wie viele Zeilen eine Tabelle hat? Ja: len(table.GetChildNodes(TableRow)).
Verwandte Ressourcen: