Wie man Tabellen in OneNote-Dateien mit Python analysiert

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

  1. Strukturer Zugang: Anzahl der Zeilen und Spalten, einzelne Zelleninhalte, Spaltebreiten
  2. Keine Tabellen-App erforderlich: Tabellendaten von OneNote auf jeder Plattform extrahieren
  3. 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-note

Schritt 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 environment

Hä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:

 Deutsch