Com analitzar taules en fitxers OneNote amb Python

Com analitzar taules en fitxers OneNote amb Python

Microsoft OneNote permet als usuaris incrustar taules de dades estructurades directament a les pàgines. Aspose.Note FOSS per a Python exposa cada taula a través d’una jerarquia Table → TableRow → TableCell, oferint-vos accés programàtic a tot el contingut de les cel·les, les metadades de les columnes i les etiquetes de la taula.

Beneficis

  1. Accés estructurat: recompte de files i columnes, contingut de cada cel·la, amplades de columna
  2. No cal cap aplicació de full de càlcul: extreu dades de taules de OneNote en qualsevol plataforma
  3. Lliure i de codi obert: llicència MIT, sense clau d’API

Guia pas a pas

Pas 1: Instal·la Aspose.Note FOSS per a Python

pip install aspose-note

Pas 2: Carrega el fitxer .one

from aspose.note import Document

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

Pas 3: Troba totes les taules

Utilitzeu GetChildNodes(Table) per recuperar cada taula de tot el document de manera recursiva:

from aspose.note import Document, Table

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

Pas 4: Llegir valors de fila i cel·les

Itera els nodes TableRow i TableCell. Cada cel·la conté nodes RichText la propietat .Text dels quals proporciona el contingut en text pla:

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

Pas 5: Llegir amplades de columna

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

Pas 6: Exporta a 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")

Problemes comuns i solucions

Les taules apareixen buides

Causa: Les cel·les contenen nodes Image en lloc de nodes RichText.

Comprovar:

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

El recompte de columnes no coincideix Columns

table.Columns reflecteix les metadades de columna emmagatzemades al fitxer. El nombre real de cel·les per fila pot diferir si les files tenen cel·les fusionades (el format de fitxer emmagatzema això a nivell binari; l’API pública no exposa un indicador de fusió).

ImportError: No hi ha cap mòdul anomenat ‘aspose’

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

Preguntes freqüents

Puc editar les dades de la taula i desar-les de nou? No. Escriure de tornada al format .one no és compatible. Els canvis realitzats en memòria (p. ex. mitjançant RichText.Replace()) no es poden persistir al fitxer d’origen.

Es detecten les cel·les combinades? L’API CompositeNode no exposa metadades de combinació. Cada TableCell es tracta com una cel·la separada independentment de la combinació visual.

Puc comptar quantes files té una taula? Sí: len(table.GetChildNodes(TableRow)).


Recursos relacionats:

 Català