Kaip išanalizuoti lenteles OneNote failuose naudojant Python
Microsoft OneNote leidžia vartotojams įterpti struktūruotas duomenų lenteles tiesiai į puslapius. Aspose.Note FOSS for Python atskleidžia kiekvieną lentelę per Table → TableRow → TableCell hierarchiją, suteikdama programiškai prieigą prie visų ląstelių turinio, stulpelių metaduomenų ir lentelės žymių.
Nauda
- Struktūruota prieiga: eilučių ir stulpelių skaičius, atskirų langelių turinys, stulpelių plotis
- Nereikia skaičiuoklių programos: išgauti lentelės duomenis iš OneNote bet kurioje platformoje
- Nemokama ir atviro kodo: MIT licencija, be API rakto
Žingsnis po žingsnio vadovas
Žingsnis 1: Įdiekite Aspose.Note FOSS for Python
pip install aspose-noteŽingsnis 2: Įkelti .one failą
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Žingsnis 3: Rasti visas lenteles
Naudokite GetChildNodes(Table), kad išgautumėte visas lenteles iš viso dokumento rekursyviai:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Žingsnis 4: Skaityti eilutės ir langelio reikšmes
Iteruokite TableRow ir TableCell mazgus. Kiekvienas langelis turi RichText mazgus, kurių .Text savybė pateikia paprasto teksto turinį:
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}")Žingsnis 5: skaityti stulpelių pločius
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}")Žingsnis 6: Eksportuoti į 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")Dažnos problemos ir sprendimai
Lentelės atrodo tuščios
Priežastis: Ląstelės turi Image mazgus, o ne RichText mazgus.
Patikrinti:
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)")Stulpelių skaičius nesutampa Columns
table.Columns atspindi stulpelio metaduomenis, saugomus faile. Faktinis langelių skaičius eilutėje gali skirtis, jei eilutės turi sujungtų langelių (failo formatas tai saugo dvejetainiu lygiu; public API neatskleidžia merge flag).
ImportError: Nėra modulio pavadinimu ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentDažnai užduodami klausimai
Ar galiu redaguoti lentelės duomenis ir juos išsaugoti? Ne. Rašymas atgal į .one formatą nepalaikomas. Atmintyje atlikti pakeitimai (pvz., per RichText.Replace()) negali būti išsaugoti šaltinio faile.
Ar sujungti langeliai aptinkami? CompositeNode API neatskleidžia sujungimo metaduomenų. Kiekvienas TableCell laikomas atskiru langeliu, nepaisant vizualaus sujungimo.
Ar galiu suskaičiuoti, kiek eilučių turi lentelė? Taip: len(table.GetChildNodes(TableRow)).
Susiję ištekliai: