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
- Yapılandırılmış erişim: satır ve sütun sayıları, tek tek hücre içeriği, sütun genişlikleri
- Elektronik tablo uygulamasına gerek yok: OneNote’tan herhangi bir platformda tablo verilerini çıkar
- Ü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-noteAdı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 environmentSı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: