Analysera OneNote-tabeller i Python
Microsoft OneNote låter användare bädda in strukturerade tabeller direkt i sidor, perfekt för uppgiftslistor, scheman, jämförelsematrisar och datainsamlingsformulär. Aspose.Note FOSS för Python gör det möjligt att programatiskt extrahera all denna tabulära data, utan att Microsoft Office behöver vara installerat.
Installera
pip install aspose-note
Läs in dokumentet och hitta tabeller
GetChildNodes(Table) utför en rekursiv sökning över hela dokumentet och returnerar varje tabell som en Table objekt:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")
Läs cellvärden
Tabeller följer en hierarki med tre nivåer: Table → TableRow → TableCell. Varje cell innehåller RichText noder vars .Text ger det rena textinnehållet:
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
for t_num, table in enumerate(doc.GetChildNodes(Table), start=1):
print(f"\nTable {t_num}:")
for r_num, row in enumerate(table.GetChildNodes(TableRow), start=1):
cells = row.GetChildNodes(TableCell)
row_values = [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in cells
]
print(f" Row {r_num}: {row_values}")
Inspektera kolumnbredder
Table.ColumnWidths returnerar den lagrade bredden för varje kolumn i punkter:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
print(f"Table {i}: {len(table.ColumnWidths)} column(s)")
print(f" Widths (pts): {table.ColumnWidths}")
print(f" Borders visible: {table.BordersVisible}")
Exportera alla tabeller till CSV
Konvertera varje tabell i dokumentet till CSV-format:
import csv, io
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
output = io.StringIO()
writer = csv.writer(output)
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(output.getvalue())
print("Saved tables.csv")
Exportera tabeller till en Python Dict / JSON
import json
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
result = []
for table in doc.GetChildNodes(Table):
rows = []
for row in table.GetChildNodes(TableRow):
cells = [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in row.GetChildNodes(TableCell)
]
rows.append(cells)
result.append({"rows": rows, "column_widths": table.ColumnWidths})
print(json.dumps(result, indent=2))
Använd den första raden som rubriker
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
rows = table.GetChildNodes(TableRow)
if not rows:
continue
def row_text(row):
return [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in row.GetChildNodes(TableCell)
]
headers = row_text(rows[0])
print("Headers:", headers)
for row in rows[1:]:
record = dict(zip(headers, row_text(row)))
print(" Record:", record)
Vad biblioteket stödjer för tabeller
| Funktion | Stöds |
|---|---|
Table.ColumnWidths | Ja: kolumnbredder i punkter |
Table.BordersVisible | Ja |
Table.Tags | Ja: OneNote-taggar på tabeller |
Celltext via RichText | Ja |
Cellbilder via Image | Ja |
| Sammanfogade celler (rowspan/colspan-metadata) | Inte exponerad i offentligt API |
Skriv/redigera tabeller och spara till .one | Nej |