Jak analyzovat tabulky v souborech OneNote pomocí Pythonu
Microsoft OneNote umožňuje uživatelům vložit strukturované datové tabulky přímo do stránek. Aspose.Note FOSS pro Python vystavuje každou tabulek prostřednictvím snímku a zobrazuje je jako soubor údajů, který se objeví na webových stránkách. Table → TableRow → TableCell Hierarchie, která vám dává programový přístup ke všem obsahu buněk, sloupců metadát a značek tabulky.
Výhody
- Strukturovaný přístup: počet řádků a sloupců, obsah jednotlivých buněk, šířka sloučenek
- Nepotřebujete aplikaci pro tabulky: extrahovat data z tabulky ze systému OneNote na jakékoli platformě
- Volný a open-source: MIT licence, žádný API klíč.
Krok za krokem
Krok 1: Nainstalujte Aspose.Note FOSS pro Python
pip install aspose-noteKrok 2: Nahrát soubor .one
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Krok 3: Najít všechny tabulky
Použití: GetChildNodes(Table) pro rekurzivní získání všech tabulek z celého dokumentu:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Krok 4: Číst hodnoty řádku a buňky
Iterovaný TableRow a) TableCell Každá buňka obsahuje: RichText uzly, jejichž: .Text vlastnost dává obsah v jednoduchém textu:
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}")Krok 5: Číst šířky sloupců
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}")Krok 6: Export do 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")Obvyklé problémy a řešení
Tabulky se zobrazují jako prázdné .
Příčina::V buněkách je uvedeno: Image uzly spíše než RichText uzly.
Ček.:
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)")Počet sloupců se nesrovnává. Columns
table.Columns odráží metadata sloupce uložená ve souboru. Skutečný počet buněk na řádek se může lišit, pokud řady mají propojené buňky (formát souborů to ukládá na binární úrovni; veřejné API nevykazuje spjatoční značku).
ImportError: Žádný modul s názvem “aspose”
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentČasté otázky
Můžu upravit data tabulky a uložit je zpět? Ne, píšu zpátky na… .one Změny provedené v paměti (např. prostřednictvím souboru “Součástí” nebo “Zákaz”). RichText.Replace()) nelze přidat do zdrojového souboru.
Jsou ztělesněné buňky detekovány? Úřad pro bezpečnost a ochranu zdraví CompositeNode API nevykazuje meta-data spojení. TableCell je považován za samostatnou buňku bez ohledu na vizuální spojení.
Můžu spočítat, kolik řádků má stůl? Ano , ano .: len(table.GetChildNodes(TableRow)).
Související zdroje: