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

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

Microsoft OneNote, kullanıcıların sayfalara doğrudan yapılandırılmış veri tabloları yerleştirmesine izin verir. Aspose.Note FOSS for Python, her tabloyu bir Table → TableRow → TableCell hiyerarşisi aracılığıyla ortaya çıkarır ve 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ı gerekmez: OneNote’tan herhangi bir platformda tablo verilerini çıkarın
  3. Ücretsiz ve açık kaynak: MIT lisansı, API anahtarı yok

Adım Adım Kılavuz

Adım 1: Python için Aspose.Note FOSS’yi kurun

pip install aspose-note

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

from aspose.note import Document

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

Adım 3: Tüm Tabloları Bul

GetChildNodes(Table) kullanarak tüm belgeden her tabloyu yinelemeli olarak alın:

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

TableRow ve TableCell düğümlerini yineleyin. Her hücre, düz metin içeriğini veren .Text özelliğine sahip RichText düğümlerini içerir:

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 Image düğümlerini, RichText düğümleri yerine içeriyor.

Kontrol:

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ücrelere sahip olması durumunda farklı olabilir (dosya formatı bunu ikili seviyede depolar; genel API birleştirme bayrağını ortaya çıkarmaz).

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

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

Sıkça Sorulan Sorular

Tablo verilerini düzenleyebilir ve geri kaydedebilir miyim? Hayır. .one formatına geri yazma desteklenmiyor. Bellekte yapılan değişiklikler (ör. RichText.Replace() aracılığıyla) kaynak dosyaya kalıcı olarak kaydedilemez.

Birleştirilmiş hücreler algılanıyor mu? CompositeNode API birleştirme meta verilerini ortaya çıkarmaz. Her TableCell görsel birleştirme göz önüne alınmaksızın 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