DiscoveryScript – Jugando con la consola

Estándar

DiscoveryScript – Jugando con la consola

Una vez que tenemos instalado el complemento podemos hacer uso de la consola, vamos a complementos->DiscoveryScript->Python Console y se abrirá una ventana en blanco, esta ventana es similar a la venta de inmediato del VBE que Incorpora Excel, en ella podremos probar nuestra sentencia o expresiones para ver los resultado de manera inmediata, probemos con algo como:

5+7

Al darle enter no aparece nada, es como si no funcionara, para poder ver el resultado de una expresión o imprimir el valor o propiedad de un objeto (por que en Python todo, absolutamente todo es un objeto, ya que no existen datos primitivos como integer, doublé, string, etc…) hay que utilizar la instrucción print (la cual sirve para imprimir en la consola), así que probemos de nuevo de esta forma:

print 5+7

Ahora si que deberemos de estar viendo el resultado, el cual es 12

Probemos con algo como esto:

print 10>20

Lo cual nos dará False

Bien, vemos que Python nos deja trabajar con expresiones aritméticas y relacionales, pero como interactuamos con el libro?

En VBA usamos Application para referirnos a la instancia activa de Excel que se encuentra abierta, pero en DiscoveryScript no funciona así, tendremos que utilizar excel en vez de Application.

Cabe señalar que DiscoveryScript es sensible a mayúsculas y minúsculas, por lo cual name es diferente a Name.

Ahora probemos con esta instrucción:

print excel.Name

Y nos dará: Microsoft Excel

Probemos con las siguientes intruciones:

libro = excel.Workbooks.Add()

libro.Sheets.Add()

print libro.Sheets.Count

libro.ActiveSheet.Delete()

libro.Close()

Analicemos las 4 líneas anteriores…

libro = excel.Workbooks.Add()

En esta línea hacemos que libro sea una referencia al nuevo libro agregado

libro.Sheets.Add()

Agregamos una nueva hoja al libro

print libro.Sheets.Count

Imprimimos el numero de hojas que contiene el libro

libro.ActiveSheet.Delete()

Eliminamos la hoja activa de libro

libro.Close()

Cerramos el libro

Hasta aquí seria todo, por el momento, mas adelante mostrare algunos ejemplos de cómo interactuar con las celdas de una hoja e ir profundizando en los tipos de datos que proporciona Python para poder procesar datos de manera práctica y sencilla que sin duda superan a los proporcionados por VBA.

Anuncios

Xefion – DiscoveryScript

Estándar

Xefion – DiscoveryScript

DiscoveryScript es un complemento gratuito para Excel el cual proporciona de manera fácil el crear scripts de macros utilizando como lenguaje de programación Python.

Lo único que hay que hacer es descargar e instalar el complemento desde su sitio web:

http://www.xefion.com/Files/DiscoveryScript_1.0.exe

Posiblemente se nos solicite instalar .NET Framework 2.0 en caso de no tenerlo instalado para que pueda funcionar de manera adecuada el complemento.

A partir de ahí, solo hay que crear un script Python y guardarlo en: c:\Xefion\Scripts entonces discoveryscript creara de manera automática un menú para poder llamar ejecutar el script.

DiscoveryScript funciona con las versiones de Excel Xp, 2003 o 2007, en la pagina no se menciona nada sobre la compatibilidad con 2010.

DiscoveryScript usa un intérprete de IronPython 1.1

Se puede consultar una pequeña guía de uso y manejo en el siguiente enlace:

http://www.xefion.com/diss/discoveryscript

Obviamente para poder sacar partido a esta herramienta hay que estar familiarizado con el modelo de objetos de Excel y poseer básicos conocimientos del lenguaje Python (el cual es muy fácil de aprender y en internet abundan tutoriales). Otro ventaja adicional es que al disponer de un intérprete de IronPython (la versión de Python implementada por Microsoft) es que tenemos acceso directo a las librerías de .NET y las librerías que proporciona Python de manera estándar, con lo cual se cuenta con una cantidad considerable de herramientas y utilidades!

Creacion de un servidor COM desde Python

Estándar

Antes que nada… que es COM? COM es el acrónimo de Component Object Model (Modelo de Objeto Componente) con lo cual se pueden crear objetos desde un lenguaje y poder utilizarlos en otro distinto en que fueron creados.

Entonces, en este ejemplo se muestra como crear un objeto COM desde Python para poder utilizarlo desde VBA/Excel. Creamos un archivo llamado “miservidorcom.py” y escribimos en el:


import sys
import pythoncom

class interprete_python:
_public_methods_ = ["Evaluar"] #metodos a exportar por el servidor COM
_public_attrs_ = ["Version"] #atributos a exportar por el servidor COM
_readonly_attrs_ = _public_attrs_ #atributos de solo lectura
_reg_progid_ = "interprete_python" #nombre para crear el objeto COM

#asignamos el id de clase por medio de la funcion CreateGuid
_reg_clsid_ = pythoncom.CreateGuid()

#constructor, seteo de atributos
def __init__(self):
self.Version = sys.version

#evalua una expresion python y devuelve su resultado
def Evaluar(self, expresion):
return eval(expresion)

#Codigo para registrar el script en caso de ser ejecutado por linea de comando por python.exe
if __name__ == "__main__":
import win32com.server.register
print sys.argv
win32com.server.register.UseCommandLine(interprete_python)
raw_input("\nServidor COM instalado!")

Antes de poder utilizar el objeto COM en VBA/Excel, hay que registrarlo con la siguiente instruccion desde la linea de comando:


python miservidorcom.py --register

Después de haber registrado el servidor COM, ya podemos invocarlo desde VBA/Excel de la siguiente forma:


Option Explicit

Sub Main()
Dim Python As Object
Dim Version As String
Dim Expresion As String
Dim Resultado As String

' Creo el objeto Python exportado por el Servidor COM:
Set Python = CreateObject("interprete_python")

' Obtengo un atributo del objeto python:
Version = Python.Version
MsgBox Version, , "Versión de Python:"

Do
Expresion = InputBox("Ingrese una expresión python para ser evaluada", "Ejemplo COM", "1+2")
If Expresion = "" Then Exit Sub
' Llamo al método del objeto python:
Resultado = Python.Evaluar(Expresion)
MsgBox Resultado, , "Resultado:"
Loop
End Sub

Si todo sale bien, deberíamos haber visualizado la versión del intérprete de Python y el resultado de la expresión “1+2”

Este es un ejemplo facil y practico para ver como se implementa un servidor COM desde Python. ¿Qué para que nos puede servir esto? Para muchas cosas interesantes, hacer uso de los diccionarios, tuplas y listas de datos que son fáciles de usar y muy poderosas, desde VBA/Excel, al igual que hacer uso de los módulos de python, los cuales superan por mucho a lo que nos brinda VBA/Excel.

NOTA: Solo hay que registrar una vez el objeto COM y después de ahí se puede llamar cuantas veces sea necesario, ya que si se registra varias veces se duplica en el registro de Windows.
Lo malo de esto es que si se desarrolla una aplicación que hay que entregar al cliente, este debe contar con el interprete Python y debe registrar el objeto COM antes de ser usado por primera vez, para este tipo de inconvenientes, podemos utilizar Py2Exe para generar una DLL o EXE y asi poder distribuir el objeto COM sin necesidad de tener instalado Python. Otra ventaja adicional es que nadie podra ver el codigo desarrollado en Python, ya que este no residira en los modulos de VBA/Excel.

Para más información al respecto, pueden revisar la fuente original: Servidor Interfase COM
 

Libro de Programacion Python para Principiantes

Estándar

Navegando por internet me tope con este valioso libro en formato PDF. Tal como indica el titulo se trata de un libro dirigido para principiantes que quieran iniciarse en el mundo de la programacion a traves de Python.

El libro comienza desde lo mas basico… instalacion, conceptos de programacion, tipos de datos, entrada y salida de datos, iteradores, listas, diccionarios, funciones, archivos, excepciones, objetos, poo, interfaces graficas de usuario, sonido y animacion. Todo lo anterior a traves de ejemplos para desarrollar sencillos videojuegos en pyhon.

Un libro de 480 paginas.  Cabe señalar que el libro viene en ingles.

Python Programming for the Absolute Beginner

DataNitro – Integrando Python a Excel

Estándar

Ahora me he topado con esta herramienta la he instalado y he probado y realmente funciona… me refiero a DataNitro

DataNitro es un plug in para Excel (complemento) el cual permite aumentar las capacidades de Excel mas allá de las permitidas al disponer de un interprete Python (Ver 2.7) para la programación de aplicaciones/soluciones dentro de Excel, un editor de código (Idle), la posibilidad de importar y remover scripts Python para su ejecución dentro de Excel,

Caracteristicas:

  • Construcción de modelos – Python tiene librerías de código abierto para el modelado matemático y financiero
  • Obtención de datos de cualquier lugar – Automatización en la entrada de datos desde bases externas y fuentes de internet
  • Rápido desempeño – El código python es mas corto y fácil de escribir
  • Integración total – DataNitro se integra totalmente dentro de Excel 2007 y 2010

Continuar leyendo

Pyxll – Programación Python para Excel

Estándar

Mi pasión por Excel y Python me hizo vagar por la web con lo cual me encontré con Pyxll

Pyxll hace posible escribir complementos para Microsoft Excel utilizando Python. Haciendo uso de decoradores en el código, este puede ser instantáneamente expuesto a Excel como funciones, menús o macros.

Los complementos desarrollados en Pyxll son rápidos de desarrollar y ofrecen un alto desempeño, siendo fácil su mantenimiento que otros métodos ofrecidos para el desarrollo de complementos para Excel.

Pyxll es usado por bancos de inversión, fondos de cobertura y compañías de ingeniería alrededor del mundo.

Pyxll soporta todas las versiones de Excel (2003, 2007 y 2010).

Pyxll está diseñado para trabajar con las versiones de Python desde la 2.3 a la 2.7. El intérprete estándar cPython es usado, lo cual significa que todos los módulos compilados de cPython funcionaran, incluyendo los módulos de terceros como numpy.

Continuar leyendo

Google API Chart – La otra forma de graficar

Estándar

Bueno… no se si sepan pero mi trabajo actual es de programador Python Jr y desarrollo reportes web por medio de programación CGI.

Hace poco me vi en la necesidad de graficar el avance de una carga de un archivo csv a una base PostgreSQL y como nuestro Python no cuenta con una librería propia para la creación de gráficas me vi en el necesidad de buscar algunas librerías externas u alguna otra herramienta que pudiera ser de ayuda en mi labor. Encontré varias pero la que mas llamo mi atención por su simplicidad fue la Google API Chart la cual solo hay que formar una URL con los parámetros del tipo de gráfico y los datos a graficar y listo ya tenemos nuestro gráfico de manera instantánea.  Obviamente hay que contar con una conexión a internet.

Aqui hay un ejemplo de una gráfica: Grafica

Si la ven, tal vez en un principio se pregunten: ¿de que me sirve? Pues de mucho, si se ponen a pensar en las posibilidades. En mi caso ya podía  graficar el avance, solo necesitaba estar construyendo un nuevo URL y actualizarlo en mi navegador para lograr visualizar el avance de forma animada. Aqui pueden ver el ejemplo: Avance Animado

Wow! excelente, no?

Ahora esto no solo se puede aplicar a programación web exclusivamente también se puede aplicar a la programación de macros donde se tengan que graficar reportes o avances y asi distribuir nuestro gráficos sin que nuestros clientes cuenten con MS-Excel, solo se les  envía la url y listo ellos podrán visualizar el avance.

Aquí les dejo un ejemplo utilizando macros en Excel: google api chart

También se pueden construir gráficos de lineas, barras, pastel, venn, puntos, etc.

Aquí una referencia mas completa en español: referencia

Espero les sea de ayuda.