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
- Strukturált hozzáférés: sor- és oszlopszámok, egyedi cellatartalom, oszlopszélességek
- Nincs szükség táblázatkezelő alkalmazásra: táblázatadatok kinyerése a OneNote‑ból bármely platformon
- 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-note2. 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 environmentGyakran 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: