OneNote Dosyalarındaki Tabloları Python Kullanarak Nasıl Ayrıştırılır

OneNote Dosyalarındaki Tabloları Python Kullanarak Nasıl Ayrıştırılır

Microsoft OneNote, kullanıcıların yapılandırılmış veri tablolarını doğrudan sayfalara gömmesine izin verir. Aspose.Note FOSS for Python her tabloyu bir Table → TableRow → TableCell hiyerarşi aracılığıyla, tüm hücre içeriğine, sütun meta verilerine ve tablo etiketlerine programatik erişim sağlar.

Faydalar

  1. Yapılandırılmış erişim: satır ve sütun sayıları, tek tek hücre içeriği, sütun genişlikleri
  2. Elektronik tablo uygulamasına gerek yok: OneNote’tan herhangi bir platformda tablo verilerini çıkar
  3. Ücretsiz ve açık kaynaklı: MIT lisansı, API anahtarı gerekmez

Adım Adım Kılavuz

Adım 1: Aspose.Note FOSS for Python’i Kurun

pip install aspose-note

Adım 2: .one Dosyasını Yükleyin

from aspose.note import Document

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

Adım 3: Tüm Tabloları Bul

Kullan GetChildNodes(Table) tüm belgeyi özyinelemeli olarak tarayarak her tabloyu almak için:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")

Adım 4: Satır ve Hücre Değerlerini Oku

Yinele TableRow ve TableCell düğümler. Her hücre şunları içerir RichText düğümler, ki .Text özelliği düz metin içeriği verir:

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}")

Adım 5: Sütun Genişliklerini Oku

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}")

Adım 6: CSV’ye Dışa Aktar

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

Yaygın Sorunlar ve Çözümler

Tablolar boş görünüyor

Neden: Hücreler içerir Image düğümler yerine RichText düğümler.

Kontrol et:

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

Sütun sayısı eşleşmiyor Columns

table.Columns dosyada depolanan sütun meta verilerini yansıtır. Satır başına gerçek hücre sayısı, satırların birleştirilmiş hücreleri varsa farklı olabilir (dosya formatı bunu ikili seviyede depolar; genel API birleştirme bayrağını ortaya çıkarmaz).

ImportError: ‘aspose’ adlı bir modül bulunamadı

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

Sık Sorulan Sorular

Tablo verilerini düzenleyip geri kaydedebilir miyim? Hayır. Geri yazma .one formatı desteklenmiyor. Bellekte yapılan değişiklikler (ör. şununla RichText.Replace()) kaynak dosyaya kalıcı olarak kaydedilemez.

Birleştirilmiş hücreler tespit ediliyor mu? Bu CompositeNode API birleştirme meta verilerini ortaya çıkarmaz. Her TableCell görsel birleştirme göz önüne alınmadan ayrı bir hücre olarak ele alınır.

Bir tablonun kaç satırı olduğunu sayabilir miyim? Evet: len(table.GetChildNodes(TableRow)).


İlgili Kaynaklar:

 Türkçe