Cara Mengurai Tabel dalam File OneNote Menggunakan Python
Microsoft OneNote memungkinkan pengguna menyematkan tabel data terstruktur langsung di halaman. Aspose.Note FOSS untuk Python mengekspos setiap tabel melalui hierarki Table → TableRow → TableCell, memberi Anda akses programatik ke semua konten sel, metadata kolom, dan tag tabel.
Manfaat
- Akses terstruktur: jumlah baris dan kolom, konten sel individual, lebar kolom
- Tidak memerlukan aplikasi spreadsheet: mengekstrak data tabel dari OneNote di platform apa pun
- Gratis dan sumber terbuka: lisensi MIT, tidak memerlukan kunci API
Panduan Langkah-demi-Langkah
Langkah 1: Instal Aspose.Note FOSS untuk Python
pip install aspose-noteLangkah 2: Muat File .one
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Langkah 3: Temukan Semua Tabel
Gunakan GetChildNodes(Table) untuk mengambil setiap tabel dari seluruh dokumen secara rekursif:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Langkah 4: Baca Nilai Baris dan Sel
Iterasikan node TableRow dan TableCell. Setiap sel berisi node RichText yang properti .Text‑nya memberikan konten teks biasa:
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}")Langkah 5: Baca Lebar Kolom
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}")Langkah 6: Ekspor ke 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")Masalah Umum dan Solusi
Tabel muncul kosong
Penyebab: Sel berisi node Image bukan node RichText.
Periksa:
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)")Jumlah kolom tidak cocok Columns
table.Columns mencerminkan metadata kolom yang disimpan dalam file. Jumlah sel per baris yang sebenarnya dapat berbeda jika baris memiliki sel yang digabung (format file menyimpan ini pada tingkat biner; API publik tidak menampilkan flag penggabungan).
ImportError: Tidak ada modul bernama ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentPertanyaan yang Sering Diajukan
Bisakah saya mengedit data tabel dan menyimpannya kembali? Tidak. Menulis kembali ke format .one tidak didukung. Perubahan yang dibuat di memori (misalnya melalui RichText.Replace()) tidak dapat dipertahankan ke file sumber.
Apakah sel yang digabung terdeteksi? API CompositeNode tidak mengungkapkan metadata penggabungan. Setiap TableCell diperlakukan sebagai sel terpisah terlepas dari penggabungan visual.
Bisakah saya menghitung berapa baris yang dimiliki tabel? Ya: len(table.GetChildNodes(TableRow)).
Sumber Daya Terkait: