Tabell​enparsing — Aspose.Note FOSS für Python

Tabellen in OneNote-Dokumenten werden als dreistufige Hierarchie dargestellt: Table → TableRow → TableCell. Jede Zelle kann enthalten RichText, Image, und andere Inhaltsknoten. Diese Seite deckt jedes Tabellenauslesemuster ab, das von Aspose.Note FOSS für Python unterstützt wird.


Grundlegende Tabelleniteration

Alle Tabellen im Dokument abrufen und deren Zellentext lesen:

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")

for table_num, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"\nTable {table_num}: {len(table.Columns)} column(s)")
    for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cells = row.GetChildNodes(TableCell)
        values = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"  Row {r}: {values}")

Tabelleneigenschaften

EigenschaftTypBeschreibung
Columnslist[TableColumn]Spaltendefinitionen; jede TableColumn hat .Width (float) und .LockedWidth (bool)
IsBordersVisibleboolOb Tabellenränder angezeigt werden
Tagslist[NoteTag]OneNote-Tags, die an die Tabelle angehängt sind
from aspose.note import Document, Table

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    print(f"Columns: {len(table.Columns)}")
    print(f"Widths (pts): {[col.Width for col in table.Columns]}")
    print(f"Borders visible: {table.IsBordersVisible}")

Tabelle nach CSV exportieren

Eine Tabelle in das CSV‑Format konvertieren:

import csv
import 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 line between tables

print(output.getvalue())

Tabellen pro Seite extrahieren

Tabellenextraktion auf einzelne Seiten beschränken:

from aspose.note import Document, Page, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")
for page_num, page in enumerate(doc.GetChildNodes(Page), start=1):
    tables = page.GetChildNodes(Table)
    if not tables:
        continue
    title = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else f"Page {page_num}"
    )
    print(f"\n=== {title} ({len(tables)} table(s)) ===")
    for t, table in enumerate(tables, start=1):
        print(f"  Table {t}:")
        for row in table.GetChildNodes(TableRow):
            cells = row.GetChildNodes(TableCell)
            row_text = [
                " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
                for cell in cells
            ]
            print(f"    {row_text}")

Zellinhalt über reinen Text hinaus

Tabellenzellen können enthalten Image und andere CompositeNode Inhalt neben RichText:

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 = [rt.Text for rt in cell.GetChildNodes(RichText) if rt.Text]
            images = cell.GetChildNodes(Image)
            print(f"  Cell texts: {texts}  images: {len(images)}")

Tabellen zählen und zusammenfassen

Statistiken über alle Tabellen in einem Dokument sammeln:

from aspose.note import Document, Table, TableRow, TableCell

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Total tables: {len(tables)}")

for i, table in enumerate(tables, start=1):
    rows = table.GetChildNodes(TableRow)
    if rows:
        cols = len(rows[0].GetChildNodes(TableCell))
    else:
        cols = 0
    print(f"  Table {i}: {len(rows)} row(s) x {cols} column(s)  widths={[col.Width for col in table.Columns]}")

Tags in Tabellen prüfen

Tabellen unterstützen NoteTag Elemente direkt:

from aspose.note import Document, Table, TagStatus

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    for tag in table.Tags:
        is_completed = tag.Status == TagStatus.Completed
        print(f"Table tag: {tag.Label}  icon={tag.Icon}  completed={is_completed}")

DOM-Position von Tabellen

Tabellen erscheinen als Kinder von OutlineElement Knoten innerhalb Outline Container auf jedem Page. Die Hierarchie ist:

Page
  └── Outline
        └── OutlineElement
              └── Table
                    └── TableRow
                          └── TableCell
                                └── RichText / Image

Sie können Tabellen auch über GetChildNodes(Table) auf jeder Ebene eines übergeordneten Knotens und durchsucht den gesamten Unterbaum.


Tipps

  • table.Columns ist eine Liste von TableColumn Objekten; verwenden Sie [col.Width for col in table.Columns] um Spaltenbreiten in Punkten zu erhalten. Die Länge entspricht der Anzahl der Spalten.
  • Zellinhalt ist nicht immer rein RichText; prüfen Sie immer auf Image Knoten ebenfalls, wenn volle Treue wichtig ist.
  • Verwenden Sie table.GetChildNodes(TableRow) statt zu iterieren for row in table wenn Sie eine typisierte Liste statt eines generischen Iterators benötigen.
  • IsBordersVisible spiegelt die Anzeigeeinstellung des OneNote‑Benutzers zum Zeitpunkt des Speicherns wider; sie beeinflusst die Inhaltsextraktion nicht.

Siehe auch

 Deutsch