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.ColumnWidths | Oui : largeurs des colonnes en points |
Table.BordersVisible | Oui |
Table.Tags | Oui : balises OneNote sur les tableaux |
Texte de cellule via RichText | Oui |
Images de cellule via Image | Oui |
| Cellules fusionnées (métadonnées rowspan/colspan) | Non exposé dans l’API publique |
Écrire/modifier des tableaux et enregistrer dans .one | Non |