Πώς να Αναλύσετε Πίνακες σε Αρχεία OneNote χρησιμοποιώντας Python

Πώς να Αναλύσετε Πίνακες σε Αρχεία OneNote χρησιμοποιώντας Python

Το Microsoft OneNote επιτρέπει στους χρήστες να ενσωματώνουν δομημένους πίνακες δεδομένων απευθείας στις σελίδες. Το Aspose.Note FOSS για Python εκθέτει κάθε πίνακα μέσω μιας ιεραρχίας Table → TableRow → TableCell, παρέχοντάς σας προγραμματιστική πρόσβαση σε όλο το περιεχόμενο των κελιών, τα μεταδεδομένα των στηλών και τις ετικέτες του πίνακα.

Οφέλη

  1. Δομημένη πρόσβαση: αριθμός γραμμών και στηλών, περιεχόμενο μεμονωμένων κελιών, πλάτη στηλών
  2. Δεν απαιτείται εφαρμογή λογιστικού φύλλου: εξαγωγή δεδομένων πίνακα από το OneNote σε οποιαδήποτε πλατφόρμα
  3. Δωρεάν και ανοιχτού κώδικα: άδεια MIT, χωρίς κλειδί API

Οδηγός βήμα προς βήμα

Βήμα 1: Εγκατάσταση Aspose.Note FOSS για Python

pip install aspose-note

Βήμα 2: Φορτώστε το αρχείο .one

from aspose.note import Document

doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")

Βήμα 3: Εύρεση Όλων των Πινάκων

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

from aspose.note import Document, Table

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

Βήμα 4: Ανάγνωση τιμών γραμμής και κελιού

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

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

doc = Document("MyNotes.one")

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

Βήμα 5: Ανάγνωση Πλάτους Στηλών

from aspose.note import Document, Table

doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"Table {i} column widths (pts): {[col.Width for col in table.Columns]}")
    print(f"Borders visible: {table.IsBordersVisible}")

Βήμα 6: Εξαγωγή σε CSV

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

doc = Document("MyNotes.one")
buf = io.StringIO()
writer = csv.writer(buf)

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(buf.getvalue())
print("Saved tables.csv")

Κοινά Προβλήματα και Διορθώσεις

Οι πίνακες εμφανίζονται κενά

Αιτία: Τα κύτταρα περιέχουν κόμβους Image αντί για κόμβους 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 = cell.GetChildNodes(RichText)
            images = cell.GetChildNodes(Image)
            print(f"  Cell: {len(texts)} text(s), {len(images)} image(s)")

Ο αριθμός των στηλών δεν ταιριάζει Columns

table.Columns αντικατοπτρίζει τα μεταδεδομένα της στήλης που αποθηκεύονται στο αρχείο. Ο πραγματικός αριθμός των κελιών ανά γραμμή μπορεί να διαφέρει εάν οι γραμμές έχουν συγχωνευμένα κελιά (η μορφή αρχείου το αποθηκεύει σε δυαδικό επίπεδο· το δημόσιο API δεν εκθέτει σημαία συγχώνευσης).

ImportError: Δεν υπάρχει μονάδα με όνομα ‘aspose’

pip install aspose-note
pip show aspose-note  # confirm it is installed in the active environment

Συχνές Ερωτήσεις

Μπορώ να επεξεργαστώ δεδομένα πίνακα και να τα αποθηκεύσω ξανά; Όχι. Η εγγραφή πίσω στη μορφή .one δεν υποστηρίζεται. Οι αλλαγές που γίνονται στη μνήμη (π.χ. μέσω RichText.Replace()) δεν μπορούν να διατηρηθούν στο αρχικό αρχείο.

Ανιχνεύονται τα συγχωνευμένα κελιά; Το CompositeNode API δεν εκθέτει μεταδεδομένα συγχώνευσης. Κάθε TableCell αντιμετωπίζεται ως ξεχωριστό κελί, ανεξαρτήτως οπτικής συγχώνευσης.

Μπορώ να μετρήσω πόσες γραμμές έχει ένας πίνακας; Ναι: len(table.GetChildNodes(TableRow)).


Σχετικοί Πόροι:

 Ελληνικά