Hoe tabellen in OneNote‑bestanden te parsen met Python
Microsoft OneNote laat gebruikers gestructureerde gegevenstabellen direct in pagina’s insluiten. Aspose.Note FOSS voor Python maakt elke tabel beschikbaar via een Table → TableRow → TableCell hiërarchie, waardoor je programmatische toegang krijgt tot alle celinhoud, kolommetadata en tabeltags.
Voordelen
- Gestructureerde toegang: aantal rijen en kolommen, inhoud van individuele cellen, kolombreedtes
- Geen spreadsheet-app vereist: tabelgegevens uit OneNote halen op elk platform
- Gratis en open source: MIT-licentie, geen API-sleutel
Stapsgewijze handleiding
Stap 1: Installeer Aspose.Note FOSS for Python
pip install aspose-noteStap 2: Laad het .one‑bestand
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Stap 3: Alle tabellen vinden
Gebruik GetChildNodes(Table) om elke tabel uit het volledige document recursief op te halen:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Stap 4: Lees rij- en celwaarden
Itereren TableRow en TableCell nodes. Elke cel bevat RichText nodes waarvan de .Text eigenschap de platte‑tekstinhoud geeft:
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}")Stap 5: Kolombreedtes lezen
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}")Stap 6: Exporteren naar 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")Veelvoorkomende problemen en oplossingen
Tabellen lijken leeg
Oorzaak: De cellen bevatten Image knooppunten in plaats van RichText knooppunten.
Controle:
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)")Kolomtelling komt niet overeen Columns
table.Columns reflecteert de kolommetadata die in het bestand is opgeslagen. Het werkelijke aantal cellen per rij kan verschillen als rijen samengevoegde cellen hebben (het bestandsformaat slaat dit op binair niveau op; de openbare API exposeert geen samenvoegvlag).
ImportError: Geen module met de naam ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentVeelgestelde vragen
Kan ik tabelgegevens bewerken en terug opslaan? Nee. Terugschrijven naar .one-formaat wordt niet ondersteund. Wijzigingen die in het geheugen worden aangebracht (bijv. via RichText.Replace()) kunnen niet worden opgeslagen in het bronbestand.
Worden samengevoegde cellen gedetecteerd? De CompositeNode API geeft geen merge metadata vrij. Elke TableCell wordt behandeld als een aparte cel, ongeacht visueel samenvoegen.
Kan ik tellen hoeveel rijen een tabel heeft? Ja: len(table.GetChildNodes(TableRow)).
Gerelateerde bronnen: