Analyser les tableaux OneNote dans Python

Microsoft OneNote permet aux utilisateurs d’intégrer des tableaux structurés directement dans les pages, parfaits pour les listes de tâches, les plannings, les matrices de comparaison et les formulaires de collecte de données. Aspose.Note FOSS pour Python rend possible l’extraction de toutes ces données tabulaires de manière programmatique, sans nécessiter d’installation de Microsoft Office.

Installer

pip install aspose-note

Charger le document et trouver les tableaux

GetChildNodes(Table) effectue une recherche récursive dans l’ensemble du document et renvoie chaque tableau sous forme de Table objet :

from aspose.note import Document, Table

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

Lire les valeurs des cellules

Les tableaux suivent une hiérarchie à trois niveaux : Table → TableRow → TableCell. Chaque cellule contient RichText nœuds dont .Text fournit le contenu en texte brut :

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

Inspecter les largeurs de colonnes

Table.ColumnWidths renvoie la largeur stockée de chaque colonne en points :

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

Exporter tous les tableaux au format CSV

Convertir chaque tableau du document au 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")

Exporter les tableaux vers un dictionnaire Python / 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))

Utiliser la première ligne comme en-têtes

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)

Ce que la bibliothèque prend en charge pour les tableaux

FonctionnalitéPris en charge
Table.ColumnWidthsOui : largeurs des colonnes en points
Table.BordersVisibleOui
Table.TagsOui : balises OneNote sur les tableaux
Texte de cellule via RichTextOui
Images de cellule via ImageOui
Cellules fusionnées (métadonnées rowspan/colspan)Non exposé dans l’API publique
Écrire/modifier des tableaux et enregistrer dans .oneNon

Étapes suivantes