كيفية تقسيم الجداول في ملفات OneNote باستخدام Python

كيفية تقسيم الجداول في ملفات OneNote باستخدام Python

يتيح Microsoft OneNote للمستخدمين إدراج لوحات البيانات المنظمة مباشرة في الصفحات.Aspose.Nota FOSS for Python يعرض كل جدول من خلال Table → TableRow → TableCell الهرم، وتوفير لك الوصول البرمجي لجميع المحتوى الخلية، وميتا البيانات العمودية، والعلامات الجدول.

الفوائد

  1. الوصول المنظم: صفوف و عدد الأعمدة ، محتوى الخلية الفردية ، عرض الأعلى
  2. لا تطبيقات متاحة مطلوب: استخراج بيانات الجدول من OneNote على أي منصة
  3. مجانا ومفتوحا المصدر: MIT الترخيص ، لا مفتاح API

خطوة بخطوة دليل

الخطوة 1: تثبيت Aspose.Note FOSS لـ Python

pip install aspose-note

الخطوة 2: تحميل ملف .1

from aspose.note import Document

doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")

الخطوة الثالثة: العثور على جميع اللوحات

استخدام 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 العام علم دمجه).

أخطاء الاستيراد: لا يوجد وحدة تسمى “تسجيل”

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)).


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

 العربية