Kaip išanalizuoti lenteles OneNote failuose naudojant Python

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

  1. Struktūruota prieiga: eilučių ir stulpelių skaičius, atskirų langelių turinys, stulpelių plotis
  2. Nereikia skaičiuoklių programos: išgauti lentelės duomenis iš OneNote bet kurioje platformoje
  3. 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 environment

Daž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:

 Lietuvių