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

CiriDisokong
Table.ColumnWidthsYa: lebar lajur dalam titik
Table.BordersVisibleYa
Table.TagsYa: Tag OneNote pada jadual
Teks sel melalui RichTextYa
Imej sel melalui ImageYa
Sel yang digabung (metadata rowspan/colspan)Tidak didedahkan dalam API awam
Tulis/sunting jadual dan simpan ke .oneTidak

Langkah Seterusnya