Hvordan analysere tabeller i OneNote‑filer ved hjelp av Python

Hvordan analysere tabeller i OneNote‑filer ved hjelp av Python

Microsoft OneNote lar brukere sette inn strukturerte datatabeller direkte i sider. Aspose.Note FOSS for Python eksponerer hver tabell gjennom et Table → TableRow → TableCell-hierarki, og gir deg programmatisk tilgang til alt celleinnhold, kolonnemetadata og tabelltagger.

Fordeler

  1. Strukturert tilgang: rad- og kolonneantall, innhold i individuelle celler, kolonnebredder
  2. Ingen regnearkapp nødvendig: hent tabelldata fra OneNote på hvilken som helst plattform
  3. Gratis og åpen kilde: MIT license, no API key

Steg-for-steg guide

Trinn 1: Installer Aspose.Note FOSS for Python

pip install aspose-note

Trinn 2: Last inn .one-filen

from aspose.note import Document

doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")

Steg 3: Finn alle tabeller

Bruk GetChildNodes(Table) for å hente hver tabell fra hele dokumentet rekursivt:

from aspose.note import Document, Table

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

Trinn 4: Les rad- og celleverdier

Iterer TableRow og TableCell noder. Hver celle inneholder RichText noder hvis .Text‑egenskap gir ren‑tekstinnholdet:

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

Trinn 5: Les kolonnebredder

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

Steg 6: Eksporter til 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")

Vanlige problemer og løsninger

Tabeller ser tomme ut

Årsak: Cellene inneholder Image noder i stedet for RichText noder.

Sjekk:

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

Kolonneantallet stemmer ikke Columns

table.Columns reflekterer kolonnemetadata lagret i filen. Det faktiske antallet celler per rad kan avvike hvis rader har flettede celler (filformatet lagrer dette på binært nivå; det offentlige API-et eksponerer ikke et flettingsflagg).

ImportError: Ingen modul med navn ‘aspose’

pip install aspose-note
pip show aspose-note  # confirm it is installed in the active environment

Ofte stilte spørsmål

Kan jeg redigere tabelldata og lagre dem tilbake? Nei. Tilbake‑skriving til .one‑formatet støttes ikke. Endringer gjort i minnet (f.eks. via RichText.Replace()) kan ikke vedvare i kildefilen.

Er sammenslåtte celler oppdaget? CompositeNode-API-en eksponerer ikke flettemetadata. Hver TableCell behandles som en egen celle uavhengig av visuell sammenslåing.

Kan jeg telle hvor mange rader en tabell har? Ja: len(table.GetChildNodes(TableRow)).


Relaterte ressurser:

 Norsk