Cara Mengurai Jadual dalam Fail OneNote Menggunakan Python
Microsoft OneNote membenarkan pengguna menyematkan jadual data berstruktur secara langsung dalam halaman. Aspose.Note FOSS untuk Python mendedahkan setiap jadual melalui hierarki Table → TableRow → TableCell, memberikan anda akses programatik kepada semua kandungan sel, metadata lajur, dan tag jadual.
Manfaat
- Akses berstruktur: kiraan baris dan lajur, kandungan sel individu, lebar lajur
- Tiada aplikasi hamparan diperlukan: ekstrak data jadual dari OneNote pada mana-mana platform
- Percuma dan sumber terbuka: lesen MIT, tiada kunci API
Panduan Langkah demi Langkah
Langkah 1: Pasang Aspose.Note FOSS untuk Python
pip install aspose-noteLangkah 2: Muat Fail .one
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Langkah 3: Cari Semua Jadual
Gunakan GetChildNodes(Table) untuk mendapatkan setiap jadual dari keseluruhan 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
Ulangi nod TableRow dan TableCell. Setiap sel mengandungi nod RichText yang sifat .Text‑nya memberikan kandungan 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 Lajur
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: Eksport 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")Isu Umum dan Penyelesaian
Jadual kelihatan kosong
Punca: Sel mengandungi nod Image dan bukannya nod RichText.
Semak:
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)")Bilangan lajur tidak sepadan Columns
table.Columns mencerminkan metadata lajur yang disimpan dalam fail. Bilangan sebenar sel per baris mungkin berbeza jika baris mempunyai sel yang digabungkan (format fail menyimpan ini pada peringkat binari; API awam tidak mendedahkan bendera gabungan).
ImportError: Tiada modul bernama ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentSoalan Lazim
Bolehkah saya mengedit data jadual dan menyimpannya kembali? Tidak. Menulis kembali ke format .one tidak disokong. Perubahan yang dibuat dalam memori (contohnya melalui RichText.Replace()) tidak dapat dipertahankan ke fail sumber.
Adakah sel yang digabung dikesan? API CompositeNode tidak mendedahkan metadata gabungan. Setiap TableCell dianggap sebagai sel berasingan tanpa mengira penggabungan visual.
Bolehkah saya mengira berapa baris dalam jadual? Ya: len(table.GetChildNodes(TableRow)).
Sumber Berkaitan: