Wie man Tabellen in OneNote-Dateien mit Python analysiert
Microsoft OneNote ermöglicht es Benutzern, strukturierte Datentabellen direkt in Seiten einzubeziehen. Aspose.Note FOSS für Python stellt jede Tabelle durch eine Table → TableRow → TableCell Hierarchie, die Ihnen programmatischen Zugriff auf alle Zelleninhalte, Spalte Metadaten und Tabelle Tags.
Vorteile
- Strukturer Zugang: Anzahl der Zeilen und Spalten, einzelne Zelleninhalte, Spaltebreiten
- Keine Tabellen-App erforderlich: Tabellendaten von OneNote auf jeder Plattform extrahieren
- Freie und Open-Source-basierte Software:MIT-Lizenz, kein API-Schlüssel.
Schritt für Schritte
Schritt 1: Installieren Sie Aspose.Note FOSS für Python
pip install aspose-noteSchritt 2: Laden der .one-Datei ein
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Schritt 3: Alle Tabellen finden
Verwendung GetChildNodes(Table) um alle Tabellen 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 Zellwerte lesen
Iteration TableRow und . TableCell Die Zellen enthalten die folgenden Daten: RichText Knoten, deren .Text Eigenschaft gibt den reinen Textinhalt:
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: Export in 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.
Überprüfung:
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)")Die Spaltenzahl stimmt nicht überein. Columns
table.Columns Die tatsächliche Anzahl der Zellen pro Zeile kann sich unterscheiden, wenn die Zeilen verschmelzte Zelle haben (das Dateifort wird auf binärer Ebene gespeichert; die öffentliche API zeigt kein Verschmelzungs-Flag an).
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ückspeichern? Nein, ich schreibe zurück an… .one Änderungen, die im Speicher vorgenommen werden (z. B. über RichText.Replace()) nicht in die Quelldatei übertragen werden kann.
Sind verschmolzene Zellen entdeckt? Die CompositeNode Die API stellt keine Metadaten zum Zusammenführen zur Verfügung. TableCell wird unabhängig von der visuellen Verschmelzung als getrennte Zelle behandelt.
Kann ich zählen, wie viele Reihen ein Tisch hat? - Ja , das ist er .: len(table.GetChildNodes(TableRow)).
Verwandte Ressourcen: