Table Parsing — Aspose.Note FOSS for Python

Οι πίνακες σε έγγραφα OneNote εκτίθενται ως ιεραρχία τριών επιπέδων: Table → TableRow → TableCell. Κάθε κελί μπορεί να περιέχει RichText, Image, και άλλους κόμβους περιεχομένου. Αυτή η σελίδα καλύπτει κάθε μοτίβο ανάλυσης πινάκων που υποστηρίζεται από το Aspose.Note FOSS για το Python.


Βασική Επανάληψη Πίνακα

Ανακτήστε όλους τους πίνακες στο έγγραφο και διαβάστε το κείμενο των κελιών τους:

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

Ιδιότητες Πίνακα

ΙδιότηταΤύποςΠεριγραφή
Columnslist[TableColumn]Ορισμοί στήλης· κάθε TableColumn έχει .Width (float) και .LockedWidth (bool)
IsBordersVisibleboolΕάν εμφανίζονται τα σύνορα του πίνακα
Tagslist[NoteTag]Ετικέτες OneNote που συνδέονται με τον πίνακα
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}")

Εξαγωγή Πίνακα σε CSV

Μετατροπή πίνακα σε μορφή 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())

Εξαγωγή Πινάκων ανά Σελίδα

Περιορίστε την εξαγωγή πινάκων σε μεμονωμένες σελίδες:

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

Περιεχόμενο Κελιού Πέρα από Απλό Κείμενο

Τα κελιά του πίνακα μπορούν να περιέχουν Image και άλλες CompositeNode περιεχόμενα παράλληλα με 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)}")

Καταμέτρηση και Σύνοψη Πινάκων

Συλλογή στατιστικών για όλους τους πίνακες σε ένα έγγραφο:

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

Επιθεώρηση Ετικετών σε Πίνακες

Οι πίνακες υποστηρίζουν NoteTag αντικείμενα απευθείας:

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 των Πινάκων

Οι πίνακες εμφανίζονται ως παιδιά του OutlineElement κόμβοι εντός Outline υποδοχείς σε κάθε Page. Η ιεραρχία είναι:

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

Μπορείτε επίσης να φτάσετε στους πίνακες μέσω GetChildNodes(Table) σε οποιοδήποτε επίπεδο προγόνου κόμβου, και ψάχνει ολόκληρο το υποδέντρο.


Συμβουλές

  • table.Columns είναι μια λίστα των TableColumn αντικειμένων· χρησιμοποιήστε [col.Width for col in table.Columns] για να λάβετε το πλάτος των στηλών σε σημεία. Το μήκος ισούται με τον αριθμό των στηλών.
  • Το περιεχόμενο του κελιού δεν είναι πάντα καθαρά RichText; ελέγξτε πάντα για Image κόμβους επίσης εάν η πλήρης πιστότητα είναι σημαντική.
  • Χρησιμοποιήστε table.GetChildNodes(TableRow) αντί για επανάληψη for row in table αν χρειάζεστε μια τυποποιημένη λίστα αντί για έναν γενικό επαναλήπτη.
  • IsBordersVisible αντανακλά την προτίμηση εμφάνισης του χρήστη OneNote κατά την αποθήκευση· δεν επηρεάζει την εξαγωγή περιεχομένου.

Δείτε επίσης

 Ελληνικά