OneNote- táblázatok Pythonban történő elemzése
A Microsoft OneNote lehetővé teszi a felhasználók számára, hogy strukturált táblázatokat közvetlenül beilleszthessenek az oldalakba. Ez tökéletes feladatlistákhoz, menetrendekhez, összehasonlító mátrixokhoz és adatgyűjtő űrlapokhez. Aspose.A Python-ra vonatkozó FOSS megengedi, ha minden ilyen tábelszerzett adatokat programszerűen kivonjuk, nem szükséges pedig a Microsoft Office telepítése.
Beépítés
pip install aspose-noteTöltse be a dokumentumot és keresse meg az asztalt
GetChildNodes(Table) rekurzív keresést végez az egész dokumentumban, és minden táblázatot egy-egy rekursziós keresésként adja vissza. Table tárgy:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")
Cella értékek olvasása
A táblázatok háromszintű hierarchiát követnek: Table → TableRow → TableCell.Minden cellában van egy-egy RichText olyan csomópontok, amelyek: .Text a szöveges tartalmat adja:
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
for t_num, table in enumerate(doc.GetChildNodes(Table), start=1):
print(f"\nTable {t_num}:")
for r_num, row in enumerate(table.GetChildNodes(TableRow), start=1):
cells = row.GetChildNodes(TableCell)
row_values = [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in cells
]
print(f" Row {r_num}: {row_values}")
Ellenőrizze az oszlopok szélességét
Table.Columns a következők listája: TableColumn tárgyak; minden egyes TableColumn a) az alábbiak: .Width a oszlop szélességét pontokban megjelölő tulajdonság:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
widths = [col.Width for col in table.Columns]
print(f"Table {i}: {len(widths)} column(s)")
print(f" Widths (pts): {widths}")
print(f" Borders visible: {table.IsBordersVisible}")
Export minden táblázat CSV-be
A dokumentum minden táblázatát CSV formátumba alakítani:
import csv, io
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
output = io.StringIO()
writer = csv.writer(output)
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(output.getvalue())
print("Saved tables.csv")
Táblázat kivitel Python Dict / JSON-ba
import json
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
result = []
for table in doc.GetChildNodes(Table):
rows = []
for row in table.GetChildNodes(TableRow):
cells = [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in row.GetChildNodes(TableCell)
]
rows.append(cells)
result.append({"rows": rows, "column_widths": [col.Width for col in table.Columns]})
print(json.dumps(result, indent=2))
Az első sor címkéül szolgáljon
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
rows = table.GetChildNodes(TableRow)
if not rows:
continue
def row_text(row):
return [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in row.GetChildNodes(TableCell)
]
headers = row_text(rows[0])
print("Headers:", headers)
for row in rows[1:]:
record = dict(zip(headers, row_text(row)))
print(" Record:", record)
Mit tud a könyvtár az asztalokról?
| A tulajdonságok | Támogatott |
|---|---|
Table.Columns (minden egyes TableColumn.Width) | Igen: oszlopszélesség pontokban |
Table.IsBordersVisible | Igen, igen. - Az is jó. |
Table.Tags | Igen: OneNote címkék az asztalon |
Cella szöveges átvitel RichText | Igen, igen. - Az is jó. |
Célképek: via Image | Igen, igen. - Az is jó. |
| Összevont cellák (sorok/szoros átfogó metaadatok) | Nem nyilvános API-ban feltüntetett |
Ír/szerkesztés táblázatokat és menteni a .one | Nem, nem. |