Parse Jadual OneNote dalam Python
Microsoft OneNote membenarkan pengguna menyematkan jadual berstruktur secara langsung dalam halaman, sesuai untuk senarai tugas, jadual, matriks perbandingan, dan borang pengumpulan data. Aspose.Note FOSS untuk Python menjadikan ia mungkin untuk mengekstrak semua data tabular ini secara programatik, tanpa memerlukan pemasangan Microsoft Office.
Pasang
pip install aspose-note
Muat Dokumen dan Cari Jadual
GetChildNodes(Table) melakukan carian rekursif merentasi keseluruhan dokumen dan mengembalikan setiap jadual sebagai a Table objek:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")
Baca Nilai Sel
Jadual mengikuti hierarki tiga peringkat: Table → TableRow → TableCell. Setiap sel mengandungi RichText node yang .Text memberi kandungan teks biasa:
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}")
Periksa Lebar Lajur
Table.ColumnWidths mengembalikan lebar yang disimpan bagi setiap lajur dalam titik:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
widths = [col.Width for col in table.Columns]
print(f"Table {i}: {len(widths)} column(s)")
print(f" Widths (pts): {widths}")
print(f" Borders visible: {table.IsBordersVisible}")
Eksport Semua Jadual ke CSV
Tukar setiap jadual dalam dokumen ke format CSV:
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")
Eksport Jadual ke 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": [col.Width for col in table.Columns]})
print(json.dumps(result, indent=2))
Gunakan Baris Pertama sebagai Tajuk
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)
Apa yang Disokong oleh Perpustakaan untuk Jadual
| Ciri | Disokong |
|---|---|
Table.ColumnWidths | Ya: lebar lajur dalam titik |
Table.BordersVisible | Ya |
Table.Tags | Ya: Tag OneNote pada jadual |
Teks sel melalui RichText | Ya |
Imej sel melalui Image | Ya |
| Sel yang digabung (metadata rowspan/colspan) | Tidak didedahkan dalam API awam |
Tulis/sunting jadual dan simpan ke .one | Tidak |