Ανάλυση πινάκων OneNote στο Python

Το Microsoft OneNote επιτρέπει στους χρήστες να ενσωματώνουν δομημένους πίνακες απευθείας σε σελίδες, ιδανικούς για λίστες εργασιών, προγράμματα, πίνακες σύγκρισης και φόρμες συλλογής δεδομένων. Aspose.Note FOSS για Python καθιστά δυνατή την προγραμματιστική εξαγωγή όλων αυτών των δεδομένων σε μορφή πινάκων, χωρίς να απαιτείται εγκατάσταση του Microsoft Office.

Εγκατάσταση

pip install aspose-note

Φορτώστε το έγγραφο και βρείτε τους πίνακες

GetChildNodes(Table) εκτελεί μια επαναληπτική αναζήτηση σε όλο το έγγραφο και επιστρέφει κάθε πίνακα ως Table αντικείμενο:

from aspose.note import Document, Table

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

Ανάγνωση τιμών κελιών

Οι πίνακες ακολουθούν μια ιεραρχία τριών επιπέδων: Table → TableRow → TableCell. Κάθε κελί περιέχει RichText κόμβους των οποίων .Text παρέχει το περιεχόμενο απλού κειμένου:

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

doc = Document("MyNotes.one")

for t_num, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"\nTable {t_num}:")
    for r_num, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cells = row.GetChildNodes(TableCell)
        row_values = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"  Row {r_num}: {row_values}")

Επιθεώρηση πλάτους στηλών

Table.ColumnWidths επιστρέφει το αποθηκευμένο πλάτος κάθε στήλης σε σημεία:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"Table {i}: {len(table.ColumnWidths)} column(s)")
    print(f"  Widths (pts): {table.ColumnWidths}")
    print(f"  Borders visible: {table.BordersVisible}")

Εξαγωγή όλων των πινάκων σε CSV

Μετατροπή κάθε πίνακα στο έγγραφο σε μορφή CSV:

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

with open("tables.csv", "w", encoding="utf-8", newline="") as f:
    f.write(output.getvalue())

print("Saved tables.csv")

Εξαγωγή πινάκων σε λεξικό Python / JSON

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

doc = Document("MyNotes.one")
result = []

for table in doc.GetChildNodes(Table):
    rows = []
    for row in table.GetChildNodes(TableRow):
        cells = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in row.GetChildNodes(TableCell)
        ]
        rows.append(cells)
    result.append({"rows": rows, "column_widths": table.ColumnWidths})

print(json.dumps(result, indent=2))

Χρήση της πρώτης σειράς ως κεφαλίδες

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

doc = Document("MyNotes.one")

for table in doc.GetChildNodes(Table):
    rows = table.GetChildNodes(TableRow)
    if not rows:
        continue

    def row_text(row):
        return [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in row.GetChildNodes(TableCell)
        ]

    headers = row_text(rows[0])
    print("Headers:", headers)
    for row in rows[1:]:
        record = dict(zip(headers, row_text(row)))
        print("  Record:", record)

Τι υποστηρίζει η βιβλιοθήκη για πίνακες

ΛειτουργίαΥποστηρίζεται
Table.ColumnWidthsΝαι: πλάτη στηλών σε σημεία
Table.BordersVisibleΝαι
Table.TagsΝαι: ετικέτες OneNote σε πίνακες
Κείμενο κελιού μέσω RichTextΝαι
Εικόνες κελιού μέσω ImageΝαι
Συγχωνευμένα κελιά (μεταδεδομένα rowspan/colspan)Δεν εκτίθεται στο δημόσιο API
Γράψτε/επεξεργαστείτε πίνακες και αποθηκεύστε σε .oneΌχι

Επόμενα βήματα