تحليل الجداول — 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}")

خصائص الجدول

الخاصيةالنوعالوصف
Columnslist[TableColumn]تعريفات الأعمدة؛ كل TableColumn يحتوي على .Width (float) و .LockedWidth (bool)
IsBordersVisibleboolما إذا كانت حدود الجدول معروضة
Tagslist[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 عند الحفظ؛ لا يؤثر على استخراج المحتوى.

انظر أيضًا

 العربية