Parsing Tabel — Aspose.Note FOSS untuk Python

Tabel dalam dokumen OneNote ditampilkan sebagai hierarki tiga tingkat: Table → TableRow → TableCell. Setiap sel dapat berisi RichText, Image, dan node konten lainnya. Halaman ini mencakup setiap pola parsing tabel yang didukung oleh Aspose.Note FOSS untuk Python.


Iterasi Tabel Dasar

Ambil semua tabel dalam dokumen dan baca teks selnya:

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

doc = Document("MyNotes.one")

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

Properti Tabel

PropertiTipeDeskripsi
Columnslist[TableColumn]Definisi kolom; setiap TableColumn memiliki .Width (float) dan .LockedWidth (bool)
IsBordersVisibleboolApakah batas tabel ditampilkan
Tagslist[NoteTag]Tag OneNote yang terlampir pada tabel
from aspose.note import Document, Table

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    print(f"Columns: {len(table.Columns)}")
    print(f"Widths (pts): {[col.Width for col in table.Columns]}")
    print(f"Borders visible: {table.IsBordersVisible}")

Ekspor Tabel ke CSV

Konversi tabel ke format CSV:

import csv
import 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 line between tables

print(output.getvalue())

Ekstrak Tabel per Halaman

Batasi ekstraksi tabel ke halaman tertentu:

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

doc = Document("MyNotes.one")
for page_num, page in enumerate(doc.GetChildNodes(Page), start=1):
    tables = page.GetChildNodes(Table)
    if not tables:
        continue
    title = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else f"Page {page_num}"
    )
    print(f"\n=== {title} ({len(tables)} table(s)) ===")
    for t, table in enumerate(tables, start=1):
        print(f"  Table {t}:")
        for row in table.GetChildNodes(TableRow):
            cells = row.GetChildNodes(TableCell)
            row_text = [
                " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
                for cell in cells
            ]
            print(f"    {row_text}")

Konten Sel Lebih dari Teks Biasa

Sel tabel dapat berisi Image dan lainnya CompositeNode konten bersamaan RichText:

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 = [rt.Text for rt in cell.GetChildNodes(RichText) if rt.Text]
            images = cell.GetChildNodes(Image)
            print(f"  Cell texts: {texts}  images: {len(images)}")

Hitung dan Ringkas Tabel

Kumpulkan statistik tentang semua tabel dalam dokumen:

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

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Total tables: {len(tables)}")

for i, table in enumerate(tables, start=1):
    rows = table.GetChildNodes(TableRow)
    if rows:
        cols = len(rows[0].GetChildNodes(TableCell))
    else:
        cols = 0
    print(f"  Table {i}: {len(rows)} row(s) x {cols} column(s)  widths={[col.Width for col in table.Columns]}")

Periksa Tag pada Tabel

Dukungan tabel NoteTag item secara langsung:

from aspose.note import Document, Table, TagStatus

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    for tag in table.Tags:
        is_completed = tag.Status == TagStatus.Completed
        print(f"Table tag: {tag.Label}  icon={tag.Icon}  completed={is_completed}")

Posisi DOM Tabel

Tabel muncul sebagai anak dari OutlineElement node di dalam Outline kontainer pada setiap Page. Hirarki adalah:

Page
  └── Outline
        └── OutlineElement
              └── Table
                    └── TableRow
                          └── TableCell
                                └── RichText / Image

Anda juga dapat mengakses tabel melalui GetChildNodes(Table) pada tingkat node nenek moyang mana pun, dan ia mencari seluruh subtree.


Tips

  • table.Columns adalah daftar TableColumn objek; gunakan [col.Width for col in table.Columns] untuk mendapatkan lebar kolom dalam poin. Panjangnya sama dengan jumlah kolom.
  • Konten sel tidak selalu murni RichText; selalu periksa Image node juga jika keakuratan penuh penting.
  • Gunakan table.GetChildNodes(TableRow) daripada mengiterasi for row in table jika Anda membutuhkan daftar bertipe daripada iterator generik.
  • IsBordersVisible mencerminkan preferensi tampilan pengguna OneNote pada saat penyimpanan; tidak memengaruhi ekstraksi konten.

Lihat Juga

 Bahasa Indonesia