Analyse de tableaux — Aspose.Note FOSS pour Python

Les tableaux dans les documents OneNote sont exposés sous forme d’une hiérarchie à trois niveaux : Table → TableRow → TableCell. Chaque cellule peut contenir RichText, Image, et d’autres nœuds de contenu. Cette page couvre tous les modèles d’analyse de tableau pris en charge par Aspose.Note FOSS pour Python.


Itération de base des tableaux

Récupérez tous les tableaux du document et lisez le texte de leurs cellules :

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")

for table_num, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"\nTable {table_num}: {len(table.Columns)} column(s)")
    for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cells = row.GetChildNodes(TableCell)
        values = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"  Row {r}: {values}")

Propriétés du tableau

PropriétéTypeDescription
Columnslist[TableColumn]Définitions de colonnes ; chaque TableColumn a .Width (float) et .LockedWidth (bool)
IsBordersVisibleboolIndique si les bordures du tableau sont affichées
Tagslist[NoteTag]Étiquettes OneNote attachées au tableau
from aspose.note import Document, Table

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    print(f"Columns: {len(table.Columns)}")
    print(f"Widths (pts): {[col.Width for col in table.Columns]}")
    print(f"Borders visible: {table.IsBordersVisible}")

Exporter le tableau au format CSV

Convertir un tableau au format CSV :

import csv
import 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 line between tables

print(output.getvalue())

Extraire les tableaux par page

Limitez l’extraction des tableaux aux pages individuelles :

from aspose.note import Document, Page, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")
for page_num, page in enumerate(doc.GetChildNodes(Page), start=1):
    tables = page.GetChildNodes(Table)
    if not tables:
        continue
    title = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else f"Page {page_num}"
    )
    print(f"\n=== {title} ({len(tables)} table(s)) ===")
    for t, table in enumerate(tables, start=1):
        print(f"  Table {t}:")
        for row in table.GetChildNodes(TableRow):
            cells = row.GetChildNodes(TableCell)
            row_text = [
                " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
                for cell in cells
            ]
            print(f"    {row_text}")

Contenu des cellules au-delà du texte brut

Les cellules du tableau peuvent contenir Image et d’autres CompositeNode contenu à côté de RichText:

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 = [rt.Text for rt in cell.GetChildNodes(RichText) if rt.Text]
            images = cell.GetChildNodes(Image)
            print(f"  Cell texts: {texts}  images: {len(images)}")

Compter et résumer les tableaux

Collectez des statistiques sur tous les tableaux d’un document :

from aspose.note import Document, Table, TableRow, TableCell

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Total tables: {len(tables)}")

for i, table in enumerate(tables, start=1):
    rows = table.GetChildNodes(TableRow)
    if rows:
        cols = len(rows[0].GetChildNodes(TableCell))
    else:
        cols = 0
    print(f"  Table {i}: {len(rows)} row(s) x {cols} column(s)  widths={[col.Width for col in table.Columns]}")

Inspecter les balises sur les tableaux

Les tableaux prennent en charge NoteTag des éléments directement:

from aspose.note import Document, Table, TagStatus

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    for tag in table.Tags:
        is_completed = tag.Status == TagStatus.Completed
        print(f"Table tag: {tag.Label}  icon={tag.Icon}  completed={is_completed}")

Position DOM des tables

Les tableaux apparaissent comme enfants de OutlineElement nœuds à l’intérieur de Outline conteneurs sur chaque Page. La hiérarchie est:

Page
  └── Outline
        └── OutlineElement
              └── Table
                    └── TableRow
                          └── TableCell
                                └── RichText / Image

Vous pouvez également accéder aux tableaux via GetChildNodes(Table) à n’importe quel niveau de nœud ancêtre, et il parcourt tout le sous‑arbre.


Conseils

  • table.Columns est une liste de TableColumn objets ; utilisez [col.Width for col in table.Columns] pour obtenir les largeurs de colonnes en points. La longueur correspond au nombre de colonnes.
  • Le contenu de la cellule n’est pas toujours purement RichText; vérifiez toujours la présence de Image nœuds également si la fidélité totale est importante.
  • Utilisez table.GetChildNodes(TableRow) plutôt que d’itérer for row in table si vous avez besoin d’une liste typée plutôt que d’un itérateur générique.
  • IsBordersVisible reflète la préférence d’affichage de l’utilisateur OneNote au moment de l’enregistrement ; cela n’affecte pas l’extraction du contenu.

Voir aussi

 Français