Parse Tabel OneNote dalam Python

Microsoft OneNote memungkinkan pengguna memasukkan tabel terstruktur langsung ke dalam halaman, sempurna untuk daftar tugas, jadwal, matriks perbandingan, dan formulir pengumpulan data. Aspose.Catatan FOSS for Python memungkinkan untuk mengekstrak semua data tabular ini secara programatis, tanpa instalasi Microsoft Office yang diperlukan.

Instal (Membuat)

pip install aspose-note

Mengisi dokumen dan menemukan tabel

GetChildNodes(Table) melakukan pencarian rekursif di seluruh dokumen dan mengembalikan setiap tabel sebagai sebuah Table objek:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")

Membaca Nilai Sel

Tabel mengikuti hierarki tiga tingkat: Table → TableRow → TableCell.Setiap sel berisi RichText node yang .Text memberikan isi teks sederhana:

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

Memeriksa lebar kolom

Table.Columns adalah daftar dari TableColumn objek; masing-masing TableColumn memiliki .Width properti yang memberikan lebar kolom 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}")

Ekspor semua tabel ke CSV

Konversi 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": [col.Width for col in table.Columns]})

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

Gunakan Baris Pertama sebagai Judul

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 Dilakukan Perpustakaan untuk Meja-meja?

FiturnyaDidukung
Table.Columns (setiap TableColumn.Width)Ya: lebar kolom dalam titik
Table.IsBordersVisibleYa, aku tahu.
Table.TagsYa: Tag OneNote pada tabel
Teks sel melalui RichTextYa, aku tahu.
Gambar sel melalui ImageYa, aku tahu.
Sel yang digabungkan (metadata rentang baris/kolspan)Tidak terpapar dalam API publik
Menulis/membetulkan tabel dan menyimpan ke .oneTidak ada.

Langkah-langkah Selanjutnya