Cum să Analizezi Tabelele în Fișiere OneNote Utilizând Python
Microsoft OneNote permite utilizatorilor să încorporeze tabele de date structurate direct în pagini. Aspose.Note FOSS pentru Python expune fiecare tabel printr-o ierarhie Table → TableRow → TableCell, oferindu‑vă acces programatic la tot conținutul celulelor, metadatele coloanelor și etichetele tabelului.
Beneficii
- Acces structurat: număr de rânduri și coloane, conținutul individual al celulelor, lățimile coloanelor
- Nu este necesară o aplicație de foi de calcul: extrage datele tabelului din OneNote pe orice platformă
- Gratuit și cu sursă deschisă: licență MIT, fără cheie API
Ghid pas cu pas
Pasul 1: Instalați Aspose.Note FOSS pentru Python
pip install aspose-notePasul 2: Încarcă fișierul .one
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Pasul 3: Găsește toate tabelele
Utilizați GetChildNodes(Table) pentru a prelua fiecare tabel din întregul document recursiv:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Pasul 4: Citește valorile rândului și celulei
Iterați nodurile TableRow și TableCell. Fiecare celulă conține noduri RichText ale căror proprietate .Text furnizează conținutul text simplu:
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}")Pasul 5: Citește lățimile coloanelor
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}")Pasul 6: Exportă în 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")Probleme comune și soluții
Tabelele apar goale
Cauză: Celulele conțin noduri Image în loc de noduri RichText.
Verificare:
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)")Numărul de coloane nu se potrivește Columns
table.Columns reflectă metadatele coloanei stocate în fișier. Numărul real de celule pe rând poate diferi dacă rândurile au celule fuzionate (formatul fișierului stochează acest lucru la nivel binar; API‑ul public nu expune un semnal de fuziune).
ImportError: Nu există niciun modul numit ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentÎntrebări frecvente
Pot să editez datele tabelului și să le salvez înapoi? Nu. Scrierea înapoi în formatul .one nu este suportată. Modificările făcute în memorie (de ex. prin RichText.Replace()) nu pot fi păstrate în fișierul sursă.
Sunt detectate celulele fuzionate? API-ul CompositeNode nu expune metadatele de fuziune. Fiecare TableCell este tratat ca o celulă separată, indiferent de fuziunea vizuală.
Pot să număr câte rânduri are un tabel? Da: len(table.GetChildNodes(TableRow)).
Resurse conexe: