Anàlisi de taules OneNote en Python

Microsoft OneNote permet als usuaris incorporar taules estructurades directament en pàgines, perfectes per a llistes de tasques, horaris, matrius de comparació i formularis de recollida de dades. Aspose.Nota FOSS per Python fa possible extraure totes aquestes dades tabulars programàticament, sense necessitat d’instal·lació de Microsoft Office.

Instal·lar

pip install aspose-note

Carregar el document i trobar taules

GetChildNodes(Table) realitza una cerca recursiva en tot el document i torna cada taula com un Table objecte:

from aspose.note import Document, Table

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

Llegir valors de cèl·lula

Les taules segueixen una jerarquia de tres nivells: Table → TableRow → TableCell.Cada cèl·lula conté: RichText nodes amb: .Text dóna el contingut de text sencer:

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

Inspeccionar els amplis de columna

Table.Columns és una llista de TableColumn objectes; cada un dels quals TableColumn té una .Width propietat que dóna la largura de columna en punts:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
    widths = [col.Width for col in table.Columns]
    print(f"Table {i}: {len(widths)} column(s)")
    print(f"  Widths (pts): {widths}")
    print(f"  Borders visible: {table.IsBordersVisible}")

Exportar totes les taules a CSV

Convertir totes les taules del document en format CSV:

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

Exportar taules a un Dict / JSON de Python

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": [col.Width for col in table.Columns]})

print(json.dumps(result, indent=2))

Utilitzar la primera fila com a encabezament

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)

El que la biblioteca dóna per les taules

CaracterísticaAjudat
Table.Columns (cada un dels TableColumn.Width)Sí: amplors de columnes en punts.
Table.IsBordersVisibleSí, sí.
Table.TagsSí: etiquetes de OneNote en taules
Text de cel·la via RichTextSí, sí.
Imatges de cèl·lules via ImageSí, sí.
Celles fusionades (metadades d’interval de filas/intervall de col·lustració)No exposats en API públics
Escriure/editar taules i guardar a .oneNo, no ho sé.

Primiers passos