Mengurai Tabel OneNote di Python

Microsoft OneNote memungkinkan pengguna menyematkan tabel terstruktur langsung di halaman, cocok untuk daftar tugas, jadwal, matriks perbandingan, dan formulir pengumpulan data. Aspose.Note FOSS untuk Python memungkinkan pengekstrakan semua data tabel ini secara programatik, tanpa memerlukan instalasi Microsoft Office.

Instal

pip install aspose-note

Muat Dokumen dan Temukan Tabel

GetChildNodes(Table) melakukan pencarian rekursif di seluruh dokumen dan mengembalikan setiap tabel 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

Tabel mengikuti hierarki tiga tingkat: Table → TableRow → TableCell. Setiap sel berisi RichText node yang .Text memberikan konten 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 Kolom

Table.ColumnWidths mengembalikan lebar yang disimpan untuk setiap kolom dalam poin:

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}")

Ekspor Semua Tabel ke CSV

Ubah setiap tabel 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")

Ekspor Tabel 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": table.ColumnWidths})

print(json.dumps(result, indent=2))

Gunakan Baris Pertama sebagai Header

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 Didukung Perpustakaan untuk Tabel

FiturDidukung
Table.ColumnWidthsYa: lebar kolom dalam poin
Table.BordersVisibleYa
Table.TagsYa: tag OneNote pada tabel
Teks sel via RichTextYa
Gambar sel via ImageYa
Sel yang digabung (metadata rowspan/colspan)Tidak diekspos dalam API publik
Tulis/edit tabel dan simpan ke .oneTidak

Langkah Selanjutnya