Cara Mengurai Tabel dalam File OneNote Menggunakan Python

Cara Mengurai Tabel dalam File OneNote Menggunakan Python

Microsoft OneNote memungkinkan pengguna menyematkan tabel data terstruktur langsung di halaman. Aspose.Note FOSS untuk Python mengekspos setiap tabel melalui hierarki Table → TableRow → TableCell, memberi Anda akses programatik ke semua konten sel, metadata kolom, dan tag tabel.

Manfaat

  1. Akses terstruktur: jumlah baris dan kolom, konten sel individual, lebar kolom
  2. Tidak memerlukan aplikasi spreadsheet: mengekstrak data tabel dari OneNote di platform apa pun
  3. Gratis dan sumber terbuka: lisensi MIT, tidak memerlukan kunci API

Panduan Langkah-demi-Langkah

Langkah 1: Instal Aspose.Note FOSS untuk Python

pip install aspose-note

Langkah 2: Muat File .one

from aspose.note import Document

doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")

Langkah 3: Temukan Semua Tabel

Gunakan GetChildNodes(Table) untuk mengambil setiap tabel dari seluruh dokumen secara rekursif:

from aspose.note import Document, Table

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

Langkah 4: Baca Nilai Baris dan Sel

Iterasikan node TableRow dan TableCell. Setiap sel berisi node RichText yang properti .Text‑nya memberikan konten teks biasa:

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")

for t, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"\nTable {t}: {len(table.Columns)} column(s)")
    for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cell_values = []
        for cell in row.GetChildNodes(TableCell):
            text = " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            cell_values.append(text)
        print(f"  Row {r}: {cell_values}")

Langkah 5: Baca Lebar Kolom

from aspose.note import Document, Table

doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"Table {i} column widths (pts): {[col.Width for col in table.Columns]}")
    print(f"Borders visible: {table.IsBordersVisible}")

Langkah 6: Ekspor ke CSV

import csv, io
from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")
buf = io.StringIO()
writer = csv.writer(buf)

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(buf.getvalue())
print("Saved tables.csv")

Masalah Umum dan Solusi

Tabel muncul kosong

Penyebab: Sel berisi node Image bukan node RichText.

Periksa:

from aspose.note import Document, Table, TableRow, TableCell, RichText, Image

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    for row in table.GetChildNodes(TableRow):
        for cell in row.GetChildNodes(TableCell):
            texts = cell.GetChildNodes(RichText)
            images = cell.GetChildNodes(Image)
            print(f"  Cell: {len(texts)} text(s), {len(images)} image(s)")

Jumlah kolom tidak cocok Columns

table.Columns mencerminkan metadata kolom yang disimpan dalam file. Jumlah sel per baris yang sebenarnya dapat berbeda jika baris memiliki sel yang digabung (format file menyimpan ini pada tingkat biner; API publik tidak menampilkan flag penggabungan).

ImportError: Tidak ada modul bernama ‘aspose’

pip install aspose-note
pip show aspose-note  # confirm it is installed in the active environment

Pertanyaan yang Sering Diajukan

Bisakah saya mengedit data tabel dan menyimpannya kembali? Tidak. Menulis kembali ke format .one tidak didukung. Perubahan yang dibuat di memori (misalnya melalui RichText.Replace()) tidak dapat dipertahankan ke file sumber.

Apakah sel yang digabung terdeteksi? API CompositeNode tidak mengungkapkan metadata penggabungan. Setiap TableCell diperlakukan sebagai sel terpisah terlepas dari penggabungan visual.

Bisakah saya menghitung berapa baris yang dimiliki tabel? Ya: len(table.GetChildNodes(TableRow)).


Sumber Daya Terkait:

 Bahasa Indonesia