Kuinka jäsentää taulukot OneNote‑tiedostoissa Pythonilla

Kuinka jäsentää taulukot OneNote‑tiedostoissa Pythonilla

Microsoft OneNote antaa käyttäjien upottaa rakenteellisia tietotaulukoita suoraan sivuille. Aspose.Note FOSS for Python paljastaa jokaisen taulukon Table → TableRow → TableCell -hierarkian kautta, tarjoten ohjelmallisen pääsyn kaikkiin solujen sisältöihin, sarakkeiden metatietoihin ja taulukkotunnisteisiin.

Hyödyt

  1. Rakenteellinen pääsy: rivien ja sarakkeiden lukumäärät, yksittäisten solujen sisältö, sarakeleveydet
  2. Ei taulukkolaskentaohjelmaa vaadita: poimi taulukon tiedot OneNotesta millä tahansa alustalla
  3. Ilmainen ja avoimen lähdekoodin: MIT-lisenssi, ei API-avainta

Vaiheittainen opas

Vaihe 1: Asenna Aspose.Note FOSS for Python

pip install aspose-note

Vaihe 2: Lataa .one-tiedosto

from aspose.note import Document

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

Vaihe 3: Etsi kaikki taulukot

Käytä GetChildNodes(Table) hakemaan kaikki taulukot koko asiakirjasta rekursiivisesti:

from aspose.note import Document, Table

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

Vaihe 4: Lue rivin ja solun arvot

Iteroi TableRow ja TableCell solmut. Jokainen solu sisältää RichText solmuja, joiden .Text ominaisuus antaa tavallisen tekstisisällön:

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

Vaihe 5: Lue sarakeleveydet

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

Vaihe 6: Vie CSV‑tiedostoon

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

Yleisiä ongelmia ja korjauksia

Taulukot ovat tyhjiä

Cause: Solut sisältävät Image solmuja sen sijaan, että ne olisivat RichText solmuja.

Tarkista:

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

Sarakkeiden määrä ei täsmää Columns

table.Columns heijastaa tiedostossa tallennettua sarakkeen metadataa. Varsinainen solujen määrä per rivi voi poiketa, jos riveillä on yhdistettyjä soluja (tiedostomuoto tallentaa tämän binääritasolla; julkinen API ei paljasta yhdistyslippua).

ImportError: Moduulia nimeltä ‘aspose’ ei löydy

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

Usein kysytyt kysymykset

Voinko muokata taulukon tietoja ja tallentaa ne takaisin? Ei. Takaisin kirjoittaminen .one-muotoon ei ole tuettu. Muistissa tehdyt muutokset (esim. RichText.Replace() kautta) eivät voi tallentua lähdetiedostoon.

Detectataanko yhdistetyt solut? CompositeNode-rajapinta ei paljasta yhdistämistietoja. Jokainen TableCell käsitellään erillisenä soluna riippumatta visuaalisesta yhdistämisestä.

Voinko laskea, kuinka monta riviä taulukossa on? Kyllä: len(table.GetChildNodes(TableRow)).


Liittyvät resurssit:

 Suomi