כיצד לנתח טבלאות בקבצי OneNote באמצעות Python
Microsoft OneNote מאפשר למשתמשים לשלב טבלאות נתונים מובנות ישירות בדפים. Aspose.Note FOSS for Python חושף כל טבלה דרך היררכיית Table → TableRow → TableCell, ומספק גישה תכנותית לכל תוכן התא, מטא‑נתוני העמודה, ולתגיות הטבלה.
יתרונות
- גישה מובנית: ספירת שורות ועמודות, תוכן תא בודד, רוחבי עמודות
- לא נדרש אפליקציית גיליון: חילוץ נתוני טבלה מ‑OneNote על כל פלטפורמה
- חינמי וקוד פתוח: רישיון 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)).
משאבים קשורים: