كيفية تحليل الجداول في ملفات 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 يعكس بيانات تعريف العمود المخزنة في الملف. قد يختلف العدد الفعلي للخلايا في كل صف إذا كان هناك خلايا مدمجة في الصفوف (يخزن تنسيق الملف ذلك على المستوى الثنائي؛ ولا تكشف الواجهة البرمجية العامة عن علامة الدمج).

ImportError: لا توجد وحدة باسم ‘aspose’

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

الأسئلة المتكررة

هل يمكنني تعديل بيانات الجدول وحفظها مرة أخرى؟ لا. الكتابة مرة أخرى إلى تنسيق .one غير مدعومة. لا يمكن حفظ التغييرات التي تم إجراؤها في الذاكرة (مثلًا عبر RichText.Replace()) إلى ملف المصدر.

هل يتم اكتشاف الخلايا المدمجة؟ لا تعرض واجهة برمجة التطبيقات CompositeNode بيانات دمج الخلايا. يتم التعامل مع كل TableCell كخلية منفصلة بغض النظر عن الدمج البصري.

هل يمكنني عد عدد الصفوف في جدول؟ نعم: len(table.GetChildNodes(TableRow)).


الموارد ذات الصلة:

 العربية