Interacção Python-MS Office

Ler um Excel

A leitura de um Excel efectua-se com a mesma simplicidade com que se efectua a escrita. Para uma melhor exemplificação da potencialidade da interacção, este exemplo contém algumas diferenças em relação ao anterior. Assim, neste exemplo, o Excel não é tornado visível, ou seja, a aplicação executa mas a janela nunca é visível para o utilizador. Mesmo que o utilizador possua um documento Excel aberto, o documento lido pelo script nunca é tornado visível. No entanto, o comando de terminar a aplicação é executado e o Excel será fechado.

Nota: O comando de término da aplicação fará com que o Excel termine e feche todos os documentos abertos, mesmo que sejam documentos abertos pelo utilizador.

O script fica em espera caso a aplicação necessite de interacção por parte do utilizador, como por exemplo se o Excel questiona o utilizador se este pretende guardar alterações a um documento. Caso se pretenda que a aplicação não seja terminada, então o comando de término da aplicação não deve ser executado. Também neste exemplo, as referências a alguns objectos do documento Excel serão feitas pelo seu nome, ao contrário do que aconteceu no exemplo anterior onde essas referências eram efectuadas através dos seus indicies. Tal é possível porque o modelo suporta estas duas formas de referência para alguns dos objectos.

Eis o exemplo completo da leitura do documento Excel criado no exemplo acima. Este exemplo irá ler o documento e mostrará na shell os valores presentes no documento. De novo, o exemplo encontra-se comentado por forma a ser mais fácil acompanhar o código.

De novo, o exemplo começa por efectuar a ligação ao Excel e de seguida abre o documento.

# -*- coding: iso-8859-15 -*-
from win32com.client import Dispatch

# Efectuar ligação ao Excel 
xlApp = Dispatch("Excel.Application")

# Abre o documento
xlWbook = xlApp.Workbooks.Open('C:excel-python-pap.xls')

A folha é seleccionada através do seu nome, em detrimento da sua posição.

# Seleccionar a primeira folha de nome 'Exemplo'
xlWbook.Sheets('Exemplo').Select()
xlSheet = xlWbook.ActiveSheet

A leitura dos valores presentes nas células faz-se de forma bastante simples, sendo o seu valor mostrado na consola.

# Ler o cabeçalho
print xlSheet.Cells(1,1).Value

# Ler a versão
print xlSheet.Cells(2,1).Value, xlSheet.Cells(2,2).Value 

# Ler as datas
print xlSheet.Cells(3,1).Value, str(xlSheet.Cells(3,2).Value)[0:8]
print xlSheet.Cells(4,1).Value, xlSheet.Cells(4,2).Value

Por fim, o documento é fechado sem guardar alterações e a ligação ao Excel é terminada.

# Fechar sem guardar alterações 
xlApp.ActiveWorkbook.Close(SaveChanges=0)

# Terminar aplicação
xlApp.Quit()

# Limpar memória
del xlApp

Após a execução do script a consola terá o seguinte aspecto:

Python/MS Office: ler dados de Excel

Controlo Total

Os exemplos anteriores ilustram a simplicidade com que se interage com o Excel a partir de Python. Esta simplicidade está presente mesmo em tarefas menos comuns quando se automatizam operações de manipulação de documento como a leitura e escrita e informação. O exemplo seguinte ilustra como é possível imprimir informação de forma automática e, por brincadeira, interagir com o sintetizador de fala do sistema.

Nota: Este exemplo requer que o sistema possua o sintetizador de fala e uma impressora correctamente instalados. Em certas condições, o Excel questionará se pretende instalar o sintetizador de fala, pelo que é necessário responder afirmativamente de forma a ouvir a frase “Python rules!”

Como sempre, o exemplo começa por efectuar a ligação ao Excel e de seguida abre o documento.

# -*- coding: iso-8859-15 -*-
from win32com.client import Dispatch

# Efectuar ligação ao Excel 
xlApp = Dispatch("Excel.Application")
xlApp.Visible = 1

# Abre o documento
xlWbook = xlApp.Workbooks.Open('C:excel-python-pap.xls')

A folha é seleccionada por nome e não por índice.

# Seleccionar a folha de nome 'Exemplo'
xlWbook.Sheets('Exemplo').Select()
xlSheet = xlWbook.ActiveSheet

A selecção da área a utilizar na impressão é efectuada através das coordenadas da folha, seguindo-se o comando de impressão do conteúdo dessa área.

# Seleccionar a informação a imprimir
xlSheet.PageSetup.PrintArea = "A1:B4"

# Imprimir as células seleccionadas
xlSheet.PrintOut()

De seguida é dada indicação para usar o motor de fala, uma funcionalidade um pouco menos comum.

# Falar
xlApp.Speech.Speak("Python rules!")

Por fim, a ligação ao Excel é finalizada sem que o documento seja actualizado.

# Fechar sem guardar alterações 
xlApp.ActiveWorkbook.Close(SaveChanges=0)

# Terminar aplicação
xlApp.Quit()

# Limpar memória
del xlApp

Interacção com Outras Aplicações

Os exemplos deste artigo centram-se na interacção com o Excel, mas é possível interagir com outras aplicações, como é o caso do Word e do Outlook. Essas interacções ficam como exercício lúdico para o leitor.

Publicado na edição 18 (PDF) da Revista PROGRAMAR.