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
| Funktion | Unterstützt |
|---|---|
Table.ColumnWidths | Ja: Spaltenbreiten in Punkten |
Table.BordersVisible | Ja |
Table.Tags | Ja: OneNote-Tags in Tabellen |
Zelltext über RichText | Ja |
Zellbilder über Image | Ja |
| Zusammengeführte Zellen (rowspan/colspan-Metadaten) | Nicht in öffentlicher API verfügbar |
Tabellen schreiben/bearbeiten und speichern in .one | Nein |