تحليل الجداول — Aspose.Note FOSS لـ 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}")خصائص الجدول
| الخاصية | النوع | الوصف |
|---|---|---|
Columns | list[TableColumn] | تعريفات الأعمدة؛ كل TableColumn يحتوي على .Width (float) و .LockedWidth (bool) |
IsBordersVisible | bool | ما إذا كانت حدود الجدول معروضة |
Tags | list[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 عند الحفظ؛ لا يؤثر على استخراج المحتوى.