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-noteLaden 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
| Merkmale | Unterstützt |
|---|---|
Table.Columns (jeweils TableColumn.Width) | Ja: Spaltenbreiten in Punkten |
Table.IsBordersVisible | - Ja , das ist gut . |
Table.Tags | Ja: 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 . |