Manipulando Excel con Python – Parte II

Estándar

En esta ocasión mostrare como obtener los valores únicos de un listado de una hoja de Excel, al mismo tiempo que mostrare algunas técnicas un poco avanzadas de la programación en Python.

Primero que nada para que el ejemplo funcione debemos tener Python y las extensiones Win32 de las cuales ya he hablado previamente en:  Instalación de Python y las extensiones win32

Este es el código de nuestro script en Python:

##Importacion de modulos a utilizar
import win32com.client
import win32clipboard
import win32con
import time

ini = time.time() ##registra el tiempo de inicio
xl = win32com.client.Dispatch(‘Excel.Application’) ##crea una nueva instancia de Excel y la asigna a xl
xl.Visible = True ##hace visible la instancia
sh = xl.ActiveSheet ##asigna a sh la hoja activa
sh.Range(‘A2:A100000’).Copy() ##se copia al portapapeles el rango de datos a analizar

win32clipboard.OpenClipboard() ##se abre el portapapeles
data = win32clipboard.GetClipboardData(win32con.CF_TEXT) ##se asigna a data el contenido del portapapeles (data es una cadena de texto)
win32clipboard.CloseClipboard() ##se cierra el portapapeles

data = data.split(‘\r\n’) ##data se convierte en una lista, utilizando como separador ‘\r\n’ ()algo asi como el texttocolumns en VBA/Excel
data = data[0:-1] ##se asigna a data nuevamente el contenido de data, pero descartando el ultimo elemento (de 0 a -1) -1 representa el ultimon elemento
unicos = {} ##se crea un diccionario vacio en el cual se almacenaran los valores unicos como llaves

for i in data: ##bucle en el cual se recorre cada elemento de data y se le asigna a i
if not unicos.has_key(i): ##en caso de que el diccionario no tenga la llave indicada (en este caso i)…
unicos[i] = None ##se crea la llave y se leasigna un None (algo asi como un Null)

x = len(unicos) ##se asigna a x la lantidad de elementos que conforman el diccionario (en este caso los elementos unicos)
llaves = unicos.keys() ##llaves es una lista que contiene las llaves que conforman el diccionario
data = ‘\n’.join([i for i in llaves]) ##se asigna a data la concatenacion de todos los elementos de la lista que conforma a llaves (data es una cadena)

win32clipboard.OpenClipboard() ##se abre el portapapeles
win32clipboard.EmptyClipboard() ##se vacia el portapapeles (ummm… creo que esta no sirve! jajajaja)
win32clipboard.SetClipboardData(win32con.CF_TEXT, data) ##se pone en el portapales el contenido de data
win32clipboard.CloseClipboard() ##se cierra el portapapeles

sh.Cells(2,5).PasteSpecial() ##se pega en E2 el contenido del portapapeles
xl.CutCopyMode = False ##se desabilita el pegado

fin = time.time() ##se registra el tiempo de termino
cad = “Tiempo Requerido: %.2f segundos! Elementos Unicos: %d” %((fin-ini),x) ##cad contiene el tiempo transcurrido y el numero de elementos unicos
sh.Cells(1,5).Value = cad ##se pone cad en la celda E1

Continuar leyendo

Anuncios

Manipulando Excel con Python – Parte I

Estándar

En esta ocasión daré una breve introducción de como acceder al modelo de objetos de Excel desde Python.

Requisitos: tener Python instalado, en mi caso la versión 2.3.5 y las extensiones win32.

Empezaremos por abrir pythonwin o el IDLE. Yo prefiero pythonwin por su función de auto completado e introduciremos el siguiente código:

import win32com.client
xl = win32com.client.Dispatch('Excel.Application')
xl.Visible = True
xl.Workbooks.Add()
xl.ActiveSheet.Cells(1,1).Value = 'Hola desde Python \n' * 5

Pasemos ahora a explicar el código… en la línea:

  1. Importamos el modulo win32com.cliente el cual nos da acceso al COM (modelo objeto componente de Excel, Word, solo he probado con esos dos… probablemente también para el resto de los programas office).
  2. Asignamos a xl una instancia de una aplicación Excel, si hubiesemos querido que se tratase de word, hubiesemos utilizado: ‘Word.Application’.
  3. Hacemos visible la aplicación.
  4. Agregamos un nuevo libro.
  5. Escribimos en la celda A1 la cadena ‘Hola desde Python’ cinco veces con una salto de linea

Como pueden ver a partir de la línea tres estamos haciendo uso del modelo de objetos de VBA/Excel. Por ahora quizás esto no resulte tan interesante pero mas adelante podremos mezclar la gran potencia de Python y hacer uso de las magnificas herramientas de Excel para un sin fin de casos de uso.

Cabe mencionar que ademas, incluso con Python podemos controlar el Openoffice… pero esa ya es otra historia… se llama PyUNO.

Python y Excel

Estándar

No hace mucho que me incursione en la programación Python debido a una nueva oferta laboral la cual se me hizo muy tentadora. Un 25% más sobre lo que ganaba en mi anterior trabajo como analista de datos en Excel, así que acepte la oferta de programador Python Jr.

Al principio tenía mis dudas si Python iba a hacer de mi agrado ya que estaba muy casado con VBA/Excel. Había probado Ruby y aun que me pareció muy potente y versátil no me acostumbre a su sintaxis.

Ya tengo casi 5 meses en mi actual trabajo y mi opinión sobre Python ha cambiado. Realmente es un lenguaje de programación muy potente, flexible, practico y sobre todo muy fácil de aprender y dominar en unas cuantas semanas. Incluso con el manejo de muy pocos elementos ya se pueden hacer cosas interesantes.

Pero no me he olvidado de Excel, ni de sus magnificas herramientas para el análisis y procesamiento de datos, es por eso que quiero desarrollar un pequeño curso tutorial en el cual exponer las ventajas de entremezclar poderosas herramientas como son Python, VBA/Excel y otras más que he descubierto por mi propia cuenta.