Come analizzare le tabelle nei file OneNote usando Python
Microsoft OneNote consente agli utenti di incorporare tabelle di dati strutturati direttamente nelle pagine. Aspose.Note FOSS for Python espone ogni tabella tramite una gerarchia Table → TableRow → TableCell, fornendo l’accesso programmatico a tutti i contenuti delle celle, ai metadati delle colonne e ai tag della tabella.
Benefici
- Accesso strutturato: conteggio di righe e colonne, contenuto delle singole celle, larghezze delle colonne
- Nessuna app di foglio di calcolo richiesta: estrai i dati della tabella da OneNote su qualsiasi piattaforma
- Gratuito e open‑source: licenza MIT, nessuna chiave API
Guida passo-passo
Passo 1: Installa Aspose.Note FOSS per Python
pip install aspose-notePasso 2: Carica il file .one
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Passo 3: Trova tutte le tabelle
Usa GetChildNodes(Table) per recuperare ogni tabella dall’intero documento in modo ricorsivo:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Passo 4: Leggi i valori di riga e cella
Itera i nodi TableRow e TableCell. Ogni cella contiene i nodi RichText la cui proprietà .Text fornisce il contenuto in testo semplice:
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}")Passo 5: Leggi le larghezze delle colonne
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}")Passo 6: Esporta in 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")Problemi comuni e soluzioni
Le tabelle appaiono vuote
Causa: Le celle contengono nodi Image anziché nodi RichText.
Verifica:
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)")Il conteggio delle colonne non corrisponde Columns
table.Columns riflette i metadati della colonna memorizzati nel file. Il numero effettivo di celle per riga può differire se le righe hanno celle unite (il formato file lo memorizza a livello binario; l’API pubblica non espone un flag di unione).
ImportError: Nessun modulo chiamato ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentDomande Frequenti
Posso modificare i dati della tabella e salvarli di nuovo? No. La scrittura di ritorno al formato .one non è supportata. Le modifiche apportate in memoria (ad es. tramite RichText.Replace()) non possono essere persistite nel file di origine.
Le celle unite vengono rilevate? L’API CompositeNode non espone i metadati di unione. Ogni TableCell è trattata come una cella separata indipendentemente dall’unione visiva.
Posso contare quante righe ha una tabella? Sì: len(table.GetChildNodes(TableRow)).
Risorse correlate: