כיצד לנתח טבלאות בקבצי OneNote באמצעות Python

כיצד לנתח טבלאות בקבצי OneNote באמצעות Python

Microsoft OneNote מאפשר למשתמשים לשלב טבלאות נתונים מובנות ישירות בדפים. Aspose.Note FOSS for 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)).


משאבים קשורים:

 עברית