Penguraian Jadual — Aspose.Note FOSS untuk Python

Jadual dalam dokumen OneNote dipaparkan sebagai hierarki tiga peringkat: Table → TableRow → TableCell. Setiap sel boleh mengandungi RichText, Image, dan nod kandungan lain. Halaman ini merangkumi setiap corak penguraian jadual yang disokong oleh Aspose.Note FOSS untuk Python.


Iterasi Jadual Asas

Dapatkan semua jadual dalam dokumen dan baca teks sel mereka:

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

Sifat Jadual

SifatJenisKeterangan
Columnslist[TableColumn]Definisi lajur; setiap TableColumn mempunyai .Width (float) dan .LockedWidth (bool)
IsBordersVisibleboolSama ada sempadan jadual dipaparkan
Tagslist[NoteTag]Tag OneNote yang dilampirkan pada jadual
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}")

Eksport Jadual ke CSV

Tukar jadual 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 Jadual Per Halaman

Hadkan ekstraksi jadual kepada halaman individu:

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

Kandungan Sel Lebih Dari Teks Biasa

Sel jadual boleh mengandungi Image dan lain-lain CompositeNode kandungan bersama-sama 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)}")

Kira dan Ringkaskan Jadual

Kumpulkan statistik mengenai semua jadual 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 Jadual

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

Kedudukan DOM Jadual

Jadual muncul sebagai anak kepada OutlineElement node dalam Outline container pada setiap Page. Hierarki ialah:

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

Anda juga boleh mencapai jadual melalui GetChildNodes(Table) pada mana-mana tahap nod nenek moyang, dan ia mencari seluruh subpokok.


Petua

  • table.Columns adalah senarai TableColumn objek; gunakan [col.Width for col in table.Columns] untuk mendapatkan lebar lajur dalam titik. Panjangnya sama dengan bilangan lajur.
  • Kandungan sel tidak selalu sepenuhnya RichText; sentiasa periksa Image nod juga jika kesetiaan penuh penting.
  • Gunakan table.GetChildNodes(TableRow) daripada mengulangi for row in table jika anda memerlukan senarai berjenis berbanding iterator generik.
  • IsBordersVisible mencerminkan keutamaan paparan pengguna OneNote pada masa simpan; ia tidak mempengaruhi pengekstrakan kandungan.

Lihat Juga

 Bahasa Melayu