Kako parsirati tablice u OneNote datotekama pomoću Pythona
Microsoft OneNote omogućuje korisnicima da izravno u stranice ugrađuju strukturirane tablice podataka. Aspose.Note FOSS for Python izlaže svaku tablicu putem Table → TableRow → TableCell hijerarhije, pružajući vam programatski pristup sadržaju ćelija, metapodacima stupaca i oznakama tablice.
Prednosti
- Strukturirani pristup: broj redaka i stupaca, sadržaj pojedinačnih ćelija, širine stupaca
- Nije potreban program za proračunske tablice: izdvojite podatke tablice iz OneNotea na bilo kojoj platformi
- Besplatan i otvorenog koda: MIT licenca, nema API ključa
Vodič korak po korak
Korak 1: Instalirajte Aspose.Note FOSS za Python
pip install aspose-noteKorak 2: Učitaj .one datoteku
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Korak 3: Pronađi sve tablice
Koristite GetChildNodes(Table) za dohvaćanje svake tablice iz cijelog dokumenta rekurzivno:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Korak 4: Čitanje vrijednosti redaka i ćelija
Iterirajte TableRow i TableCell čvorove. Svaka ćelija sadrži RichText čvorove čija .Text svojstvo daje sadržaj običnog teksta:
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}")Korak 5: Čitanje širina stupaca
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}")Korak 6: Izvoz u 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")Uobičajeni problemi i rješenja
Tablice su prazne
Uzrok: Ćelije sadrže Image čvorove umjesto RichText čvorova.
Provjera:
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)")Broj stupaca se ne podudara Columns
table.Columns odražava metapodatke stupca pohranjene u datoteci. Stvarni broj ćelija po retku može se razlikovati ako redovi imaju spojene ćelije (format datoteke pohranjuje to na binarnoj razini; javno API ne izlaže zastavicu spajanja).
ImportError: Nema modula pod nazivom ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentČesto postavljana pitanja
Mogu li uređivati podatke tablice i spremiti ih natrag? Ne. Pisanje natrag u format .one nije podržano. Promjene napravljene u memoriji (npr. putem RichText.Replace()) ne mogu se trajno pohraniti u izvornoj datoteci.
Jesu li spojene ćelije otkrivene? CompositeNode API ne izlaže metapodatke o spajanju. Svaka TableCell tretira se kao zasebna ćelija bez obzira na vizualno spajanje.
Mogu li izbrojati koliko redaka ima tablica? Da: len(table.GetChildNodes(TableRow)).
Povezani resursi: