Lentelių analizė — Aspose.Note FOSS, skirta Python

OneNote dokumentų lentelės pateikiamos kaip trijų lygių hierarchija: Table → TableRow → TableCell. Kiekvienas langelis gali turėti RichText, Image, ir kitus turinio mazgus. Šiame puslapyje apžvelgiami visi lentelių analizės šablonai, kuriuos palaiko Aspose.Note FOSS, skirtas Python.


Pagrindinis lentelių iteravimas

Gaukite visas dokumento lenteles ir perskaitykite jų langelių tekstą:

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

Lentelės savybės

SavybėTipasAprašymas
Columnslist[TableColumn]Stulpelių apibrėžimai; kiekvienas TableColumn turi .Width (float) ir .LockedWidth (bool)
IsBordersVisibleboolAr lentelės rėmeliai rodomi
Tagslist[NoteTag]OneNote žymės, prisegtos prie lentelės
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}")

Eksportuoti lentelę į CSV

Konvertuoti lentelę į CSV formatą:

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())

Išgauti lenteles pagal puslapį

Apribokite lentelių išgavimą atskiriems puslapiams:

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

Langelio turinys, viršijantis paprastą tekstą

Lentelės langeliai gali turėti Image ir kitus CompositeNode turinį šalia 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)}")

Skaičiuoti ir apibendrinti lenteles

Surinkti statistiką apie visas dokumento lenteles:

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

Tikrinti žymas lentelėse

Lentelės palaiko NoteTag elementai tiesiogiai:

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

DOM lentelių padėtis

Lentelės rodomos kaip vaikai OutlineElement mazgai viduje Outline konteineriai kiekviename Page. Hierarchija yra:

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

Taip pat galite pasiekti lenteles per GetChildNodes(Table) bet kuriame protėvio mazgo lygyje, ir jis ieško viso po-medžio.


Patarimai

  • table.Columns yra sąrašas TableColumn objektų; naudokite [col.Width for col in table.Columns] gauti stulpelių pločius taškais. Ilgis lygiuoja su stulpelių skaičiumi.
  • Ląstelės turinys ne visada yra grynai RichText; visada patikrinkite Image mazgus taip pat, jei svarbus visiškas tikslumas.
  • Naudokite table.GetChildNodes(TableRow) vietoj iteravimo for row in table jei jums reikia tipizuoto sąrašo, o ne bendro iteratoriaus.
  • IsBordersVisible atspindi OneNote naudotojo rodymo nuostatą išsaugojimo metu; tai neįtakoja turinio išskyrimo.

Taip pat žiūrėkite

 Lietuvių