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
- 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ı gerekmez: OneNote’tan herhangi bir platformda tablo verilerini çıkarın
- Ü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-noteAdı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 environmentSı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: