Como analisar tabelas em arquivos OneNote usando Python
Microsoft OneNote permite que os usuários incorporem tabelas de dados estruturados diretamente nas páginas. Aspose.Note FOSS for Python expõe cada tabela através de uma hierarquia Table → TableRow → TableCell, proporcionando acesso programático a todo o conteúdo das células, metadados das colunas e tags da tabela.
Benefícios
- Acesso estruturado: contagem de linhas e colunas, conteúdo de células individuais, larguras das colunas
- Nenhum aplicativo de planilha necessário: extraia dados de tabelas do OneNote em qualquer plataforma
- Gratuito e de código aberto: licença MIT, sem chave de API
Guia passo a passo
Etapa 1: Instale o Aspose.Note FOSS para Python
pip install aspose-noteEtapa 2: Carregar o arquivo .one
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")Etapa 3: Encontrar todas as tabelas
Use GetChildNodes(Table) para recuperar todas as tabelas de todo o documento recursivamente:
from aspose.note import Document, Table
doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")Etapa 4: Ler valores de linha e célula
Itere os nós TableRow e TableCell. Cada célula contém nós RichText cujos .Text propriedade fornece o conteúdo em texto simples:
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}")Etapa 5: Ler larguras das colunas
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}")Etapa 6: Exportar para 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")Problemas Comuns e Soluções
As tabelas aparecem vazias
Causa: As células contêm nós Image em vez de nós RichText.
Verificar:
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)")A contagem de colunas não corresponde Columns
table.Columns reflete os metadados de coluna armazenados no arquivo. O número real de células por linha pode diferir se as linhas tiverem células mescladas (o formato de arquivo armazena isso no nível binário; a API pública não expõe uma flag de mesclagem).
ImportError: Nenhum módulo chamado ‘aspose’
pip install aspose-note
pip show aspose-note # confirm it is installed in the active environmentPerguntas Frequentes
Posso editar dados da tabela e salvá‑los de volta? Não. A gravação de volta no formato .one não é suportada. Alterações feitas na memória (por exemplo, via RichText.Replace()) não podem ser persistidas no arquivo de origem.
As células mescladas são detectadas? A API CompositeNode não expõe metadados de mesclagem. Cada TableCell é tratada como uma célula separada, independentemente da mesclagem visual.
Posso contar quantas linhas uma tabela tem? Sim: len(table.GetChildNodes(TableRow)).
Recursos Relacionados: