Analysera OneNote-tabeller i Python

Microsoft OneNote låter användare bädda in strukturerade tabeller direkt i sidor, perfekt för uppgiftslistor, scheman, jämförelsematrisar och datainsamlingsformulär. Aspose.Note FOSS för Python gör det möjligt att programatiskt extrahera all denna tabulära data, utan att Microsoft Office behöver vara installerat.

Installera

pip install aspose-note

Läs in dokumentet och hitta tabeller

GetChildNodes(Table) utför en rekursiv sökning över hela dokumentet och returnerar varje tabell som en Table objekt:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")

Läs cellvärden

Tabeller följer en hierarki med tre nivåer: Table → TableRow → TableCell. Varje cell innehåller RichText noder vars .Text ger det rena textinnehållet:

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}")

Inspektera kolumnbredder

Table.ColumnWidths returnerar den lagrade bredden för varje kolumn i punkter:

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}")

Exportera alla tabeller till CSV

Konvertera varje tabell i dokumentet till 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")

Exportera tabeller till en Python Dict / JSON

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))

Använd den första raden som rubriker

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)

Vad biblioteket stödjer för tabeller

FunktionStöds
Table.ColumnWidthsJa: kolumnbredder i punkter
Table.BordersVisibleJa
Table.TagsJa: OneNote-taggar på tabeller
Celltext via RichTextJa
Cellbilder via ImageJa
Sammanfogade celler (rowspan/colspan-metadata)Inte exponerad i offentligt API
Skriv/redigera tabeller och spara till .oneNej

Nästa steg