Hogyan kell táblázatokat feldolgozni OneNote fájlokban Python használatával

Hogyan kell táblázatokat feldolgozni OneNote fájlokban Python használatával

Microsoft OneNote lehetővé teszi a felhasználók számára, hogy strukturált adat táblázatokat ágyazzanak be közvetlenül az oldalakba. Az Aspose.Note FOSS for Python minden táblázatot egy Table → TableRow → TableCell hierarchián keresztül tesz elérhetővé, amely programozott hozzáférést biztosít minden cella tartalmához, az oszlop metaadataihoz és a táblázat címkéihez.

Előnyök

  1. Strukturált hozzáférés: sor- és oszlopszámok, egyedi cellatartalom, oszlopszélességek
  2. Nincs szükség táblázatkezelő alkalmazásra: táblázatadatok kinyerése a OneNote‑ból bármely platformon
  3. Ingyenes és nyílt forráskódú: MIT licenc, nincs API kulcs

Lépésről‑lépésre útmutató

1. lépés: Telepítse az Aspose.Note FOSS-t Pythonhoz

pip install aspose-note

2. lépés: Töltse be a .one fájlt

from aspose.note import Document

doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")

3. lépés: Az összes táblázat megtalálása

Használja a GetChildNodes(Table)-t, hogy rekurzívan lekérje az egész dokumentumból az összes táblázatot:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")

4. lépés: Sor- és cellaértékek olvasása

Iterálja a TableRow és TableCell csomópontokat. Minden cella RichText csomópontokat tartalmaz, amelyek .Text tulajdonsága adja a sima szöveges tartalmat:

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}")

5. lépés: Oszlopszélességek olvasása

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}")

6. lépés: Exportálás CSV-be

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")

Általános problémák és megoldások

A táblázatok üresnek tűnnek

Ok: A cellák Image csomópontokat tartalmaznak, nem pedig RichText csomópontokat.

Ellenőrzés:

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)")

Az oszlopszám nem egyezik Columns

table.Columns tükrözi a fájlban tárolt oszlop metaadatait. A soronkénti tényleges cellák száma eltérhet, ha a sorok egyesített cellákat tartalmaznak (a fájlformátum ezt bináris szinten tárolja; a nyilvános API nem tesz közzé egyesítési jelzőt).

ImportError: Nincs ‘aspose’ nevű modul

pip install aspose-note
pip show aspose-note  # confirm it is installed in the active environment

Gyakran Ismételt Kérdések

Szerkeszthetek táblázat adatokat és vissza menthetem? Nem. A visszaírás .one formátumba nem támogatott. A memóriában végzett módosítások (pl. RichText.Replace() segítségével) nem menthetők a forrásfájlba.

Az egyesített cellák észlelhetők? Az CompositeNode API nem teszi közzé az egyesítés metaadatait. Minden TableCell külön cellaként kezelődik, függetlenül a vizuális egyesítéstől.

Meg tudom számolni, hány sor van egy táblázatban? Igen: len(table.GetChildNodes(TableRow)).


Kapcsolódó források:

 Magyar