Jump to content

Python en Excel!


digitalboy

Recommended Posts

Posted

Hola!

Hace no mucho publique algo acerca de python de un reto de programacion, en el cual lamentablemente no pude continuar... esa ya es otra historia que conocen mejor Macro Antonio y Cacho!

Hoy! quiero compartir con ustedes este complemento que encontre para excel 2003 y 2007 y que sirve para crear scripts Python que se ejecutan en Excel.

Wow es una maravilla! algo recortado pero muy emocionante e interesante!

Este es el link de donde pueden descargarlo:

DiscoveryScript - Xefion

En la pagina viene un ejemplo sencillo de su instalacion, funcionamiento y un pequeño script de ejemplo!

Con esta utilidad, ya disponemos de otro lenguaje de programacion para efectuar nuestra labores diarias. Tendremos a la mano las estructuras y herramienta que python nos proporciona para hacer nuestra mas facil.

Siento que no es comparable en cuanto al IDE de VBA que proporciona Excel y su gran InteliSense pero bien vale el esfuerzo aprender algo de python!

Ahora por el momento les dejo este ejemplo para que lo prueben en la consola de python del complemento (Python Console):


ws = excel.ActiveSheet

for i in range(1,101): ws.Cells[i,1].Value2 = i
[/PHP]

El programa anterior rellena del 1-100 de A1:A100

Asi mismo les dejo este manual de python:

Aprenda a Pensar Como un Programador con Python [PDF] y F.A.Q | ANIME LINUX STYLE IN THE WORLD

Puede que algunas cosas no funcionen de ese manual ya que el complemento utiliza IronPython 1.1 el cual fue la version que Microsoft desarrollo por su cuenta, pero aun asi sera de gran utilidad. Aun asi pongo este otro link el cual es sobre IronPython, lo malo es que esta en Ingles:

Contents - IronPython Cookbook

  • 2 months later...
Posted

Hola a todos!

Quise reutilizar este post para no crear uno nuevo. Wow he ido haciendo interesantes descubrimientos de Python y la manera de como combinarlos con Excel...

En mi blog: http://mexcel.wordpress.com/

Estare publicando... espero que semana a semana articulos donde pueda mostrar el uso de nuevas herramientas con Excel y Python. Por el momento estoy publicando una serie de articulos para el aprendizaje de python y mas adelante la sinergia de Python/Excel

Posted

En todo este tiempo he pubicado los siguientes articulos.

1. Python y Excel « MeXcel Plus

2. Python: Introducción « MeXcel Plus

3. ¿Por que aprender Python? « MeXcel Plus

4. Instalación de Python y las extensiones win32 « MeXcel Plus (incluye video tutorial)

5. Curso de programación Python en Video « MeXcel Plus

Espero poder publicar ejemplos mas enfocados a la manipulacion de excel en las siguientes semanas si el tiempo me lo permita entre otras herramientas mas.

  • 2 weeks later...
Posted

Hola!

http://mexcel.wordpress.com/2012/01/25/manipulando-excel-con-python-parte-i/

En ese enlace muestro un ejemplo básico de como acceder a VBA/Excel desde Python, espero que este sea el primero de muchos ejemplos útiles y prácticos de la combinación de dos fantásticas herramientas! La verdad es que estoy emocionado ya que día a día aprendo mas cosas sobre python y lo fácil que es... hoy aprendí a crear archivos zip utilizando solo 4 lineas de código, pueden creerlo? cool! Mas adelante en mi blog y si el tiempo me lo permite seguiré publicando mas cosas.

  • 5 weeks later...
Posted

Ya estoy de vuelta! Esta vez con la siguiente aportación sobre el filtrado de valores únicos:

Manipulando Excel con Python

En este ejemplo comparo el rendimiento de usar el filtro avanzado para obtener los valores únicos de un listado de cien mil números y el mismo proceso pero realizado en python.

Mis observaciones: el advancedfilter como objeto integrado es mas sencillo de utilizar solo se emplea una linea de codigo, en comparación con python en el cual me lleve alrededor de 30 lineas de codigo! pero en cuanto al rendimiento python hizo gala de su potencia, en menos de 7 segundos ya tenia los valores únicos del listado.

Corro la macro con el listado que pongo a su disposición en mi blog y se queda pensando, realmente no se cuanto tiempo demora o sera mi nueva netbook? sera que el procesador centrino tiene menor rendimiento que un atom de doble núcleo? no lo se! hojala alguien pueda echarle un ojo a la macro y ver que onda.

Seria magnifico lograr una mayor integración entre Python y Excel, sigo estudiando en ello. Próximamente espero poder explicar como hacer uso de los métodos de pyton en Excel. Hasta Pronto!

  • 5 months later...
Posted

Después de un tiempo de ausencia en este tema, vengo de regreso con dos nuevas herramientas que acabo de encontrar para poder trabajar e integrar de una manera mas fácil Python dentro de Excel.

Estas dos herramientas son Pyxll y Datanitro, ambas son versiones beta pero que no tienen liomitante en cuanto al tiempo de uso.

Pyxll permite crear complementos para Excel pero los cuales son programado utilizando el lenguaje Python. Tambien nos permite crear UDF, macros y menus de opciones y funciona para las versiones 2003 a 2010. Lo unico que necesitaremos es tener instalado un interprete Python el cual puede ir desde la version 2.3 a la 2.7 y con esto podremos utilizar Pyxll

DataNitro se integra dentro de Excel y tiene la ventaja de que ya incorpora un interprete de Python (Ver 2.7), DataNitro nos brindara un editor para redactar nuestros scripts en Python, un shell para poder ejecutar instrucciones Python y ver los resultados en tiempo real y al posibilidad de importar scripts para su ejecución en Excel. Se requiere el .Net FrameWork 3.5 para que DataNitro pueda funcionar a la perfección.

Espero que se den la oportunidad de probar estas dos herramientas que estoy seguro son de gran utilidad. Python proporciona gran cantidad de modulos de tiempo, gráficos, sonido, matemáticos, estadísticos, bases de datos, redes y muchos más con los cuales se pueden ampliar el poder de Excel.

De los dos anteriores... DataNitro es en mi opinión el mas fácil y practico de usar ya que instala casi todo y no necesitamos descargarnos ningún interprete python.

Estos son los enlaces:

Pyxll – Programación Python para Excel

DataNitro – Integrando Python a Excel

Posted

Buenas digitalBoy

Tu maquina no es tan mala, en tu comentario pones que te tarda 201.23 segundos, a mi me tarda 250.

He hecho un procedimiento que hace lo mismo en 7 segundos, eso si, no respeta el orden, deja el listado final ordenado.

He intentado subir el archivo pero no me ha dejado, no se como te las habras ingeniado para subirlo ocupando mas de 1 mega, de todas formas dejo el codigo. He puesto los mismos rangos para que solo tengas que copiarlo y pegarlo en tu hoja.

Sub pruebas_verzulsan()
Dim rOrigen As Range, rDestino As Range
Set rOrigen = Range("a1:a100000")
Set rDestino = Range("d1")
Dim p As Range, q As Range

ini = Timer

Set rDestino = Range(Cells(rDestino.Row, rDestino.Column), Cells(rDestino.Row - 1 + rOrigen.Rows.Count, rDestino.Column))
rOrigen.Copy Destination:=rDestino
Call Ordenar(ActiveSheet, rDestino)
Application.ScreenUpdating = False
For Each p In rDestino
Set q = Cells(p.Row + 1, p.Column)
If p = q Then p.Clear
Next
Call Ordenar(ActiveSheet, rDestino)
Application.ScreenUpdating = True

fin = Timer
MsgBox "Teimpo Requerido: " & (fin - ini) & " segundos!", vbInformation
End Sub

Sub Ordenar(queHoja As Worksheet, queRango As Range)
queHoja.Sort.SortFields.Clear
queHoja.Sort.SortFields.Add Key:=queRango, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With queHoja.Sort
.SetRange queRango
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
[/CODE]

Saludos

Posted

Tu maquina no es tan mala, en tu comentario pones que te tarda 201.23 segundos, a mi me tarda 250.

He hecho un procedimiento que hace lo mismo en 7 segundos, eso si, no respeta el orden, deja el listado final ordenado.

He intentado subir el archivo pero no me ha dejado, no se como te las habras ingeniado para subirlo ocupando mas de 1 mega, de todas formas dejo el codigo. He puesto los mismos rangos para que solo tengas que copiarlo y pegarlo en tu hoja.

Hola verzulsan!

En cuanto a mi maquina... esa macro la hice con una netbook que tenia un rocesador Intel® Atom™ Z520/Z530 (doble núcleo), ups! no recuerdo a cuantos Mgz y después la vendí y compre una X340 la cual pesa lo mismo 1.3 kg y una pantalla mas grande de 13.3 pulgadas pero no le preste atención al procesador y resulto ser un Intel Core de un nucle a 1.4 Mgz y acabo de ejecutar la macro y se tarda 430 segundos! jajaja esta mas lenta!

Mas sin encambio probe tu macro y esta tardo 4.58 segundos! Wow eres genio! Te la rifas!

Yo quería demostrar que el objeto advancedFilter es mas fácil de manejar no siempre es mas rápido dependiendo la cantidad de datos y la dispersión del conjunto de los mismos, tal vez recuerdes este tema: Contar Unicos

Tu has demostrado que un buen algoritmo puede ser mas rápido que un objeto de propósito general como el advancedFilter. Me quito el sombrero ante ti! Es aquí cuando me vienen las palabras de un colega: "Cual es el mejor lenguaje de programación? Es aquel al que se le pueda extraer la mayor ventaja y con el que uno se desenvuelva mejor!"

Aun que... viendo tu algoritmo me parece que se puede mejorar si lo trabajas en memoria ya que el acceder a cada celda es lento!

También probé el script de Python el cual copie de mi blog y tiene errores ya que al subirlo al blog me cambio las ' por ` y así no corría, haré las modificaciones y lo pondré para que lo descarguen y lo ejecuten. Pero ahora que lo corrí se tarda 0.9 segundos en extraer los valores únicos sin ordenarlos.

Mas tarde espero subir tu código mejorado y hacer las modificaciones en mi blog, Saludos!

- - - - - Mensaje combinado - - - - -

Lo prometido es deuda! Aquí tienes tu código optimizado:


Sub Unicos_Optimizado()
Dim rng As Range
Dim datos As Variant
Dim i As Long
Dim tempo As Double


tempo = Timer
Range("A1").CurrentRegion.Copy Range("D1")
Range("D1").CurrentRegion.Sort Range("D1"), xlAscending, Header:=xlYes
Set rng = Range("D1").CurrentRegion


datos = rng
For i = 2 To UBound(datos) - 1
If datos(i + 1, 1) = datos(i, 1) Then
datos(i, 1) = vbNullString
End If
Next i


rng = datos
rng.Sort rng.Item(1), xlAscending, Header:=xlYes
MsgBox Timer - tempo & " segundos!"
End Sub
[/CODE]

Ahora solo me toma 1.5 segundos! (una mejora sustancial) contra los 0.98 segundos que le toma Python, creo que si modifico el script Python llegaría al mismo tiempo o quizás lo rebasaría...

Posted

Guau muy buen trabajo, va bastante rapido, 0.9 segundos me tarda.

Me ha gustado mucho el estilo con que has manejado los datos, no sabia que se podia usar esa combinacion de Variant y Range para transferir datos de manera tan facil.

datos = rng
.....
rng = datos.[/CODE]

Suerte rebasando esa marca con el script de Python.

Un saludo.

  • 2 months later...
Posted

Hola!

Ya de regreso, esta vez con el codigo Python de como crear un servidor COM desde python para poder llamar objetos de python desde VBA/Excel, por el momento es un ejemplo muy sencillo pero es la base de cosas mas interesantes...

Mi siguiente paso es poder crear un objeto que permita comprimir y descomprimir archivos .zip directamente desde VBA/Excel

[h=2]Creacion de un servidor COM desde Python[/h]

Posted

Excelente ejemplo Digitalboy, revise tu pagina y me agrado la publicacion sobre arduino, FELICITACIONES !!, ojala continues publicando mas temas sobre arduino.

Saludos.

jmollan

Posted

Excelente ejemplo Digitalboy, revise tu pagina y me agrado la publicacion sobre arduino, FELICITACIONES !!, ojala continues publicando mas temas sobre arduino.

Muchas gracias! Desde hace un tiempo me he apartado del tema de arduino... el trabajo y ademas estar estudiando cosas (Python, C, VBA/Excel, Estadistica y otras cosas que no tienen que ver con la informatica...) apenas me da tiempo jajaja.

Tratare de de hacerme un espacio, no puedo prometer nada y ver si publico algo sobre el sensor de temperatura o alguna otra practica con arduino y VBA/Excel

Saludos

Posted

Esta es mi nueva aportacion al tema Excel/Python

Xefion – DiscoveryScript « MeXcel Plus

Proximanete espero estar subiendo mas ejemplos aplicados a esta herrmienta para poder manipular datos en una hoja de excel y mostrar las ventajas del uso de Python en Excel

- - - - - Mensaje combinado - - - - -

Empezare a escribir una serie de articulos con ejemplos y ejercicios sobre DiscoveryScript para mostrar algunas de las ventajas o diferencias de la programacion Python con el modelo de objetos de Excel...

Este es el primero de ellos:

http://mexcel.wordpress.com/2012/11/18/discoveryscript-jugando-con-la-consola/

Espero sea de su agrado, tratare de redactarlo de forma amena y comprensible, pero debo hacer la aclaracion que se debe estar familiarizado con el modelo de objetos de Excel.

Saludos!

  • 2 years later...
Posted

una consulta estoy haciendo un macro en excel :

@xl_macro()

def mmprueba():

hoja_00=xl_app()

matriz_datos=hoja_00.Selection

A=[]

for i in matriz_datos:

for j in i:

A.append(j)

B=array(A)

C=B.reshape(len(B)/7,7)

Datos_X0=[]

for i in range(len(B)/7):

Datos_X0.append(C[0])

Datos_Y0=[]

for i in range(len(B)/7):

Datos_Y0.append(C[1])

Datos_Xf=[]

for i in range(len(B)/7):

Datos_Xf.append(C[2])

Datos_Yf=[]

for i in range(len(B)/7):

Datos_Yf.append(C[3])

Datos_A=[]

for i in range(len(B)/7):

Datos_A.append(C[4])

Datos_E=[]

for i in range(len(B)/7):

Datos_E.append(C[5])

Datos_I=[]

for i in range(len(B)/7):

Datos_I.append(C[6])

numeros=len(B)/7

K_total=[]

Prueba_MM=hoja_00.Range('A1')

for i in range(numeros):

K_total=K_total+[Matrix2D(Datos_X0,Datos_Y0,Datos_Xf,Datos_Yf,Datos_E,Datos_I,Datos_A).Mat()]

Prueba_MM.Value=numeros

Pero no se por que no funka la parte de Matrix2D

Archived

This topic is now archived and is closed to further replies.

  • 108 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Files

  • Download Statistics

    • Files
      184
    • Comments
      96
    • Reviews
      28

    More information about "Un juego solitario en Excel"
    Latest File
    By pegones1

    4    0

  • Crear macros Excel

  • Posts

    • Hola, por lo que indicas, me parece que se haría con la función AGRUPARPOR
    • Tengo instalago excel 365 y necesito usar la función =unicos(); pero con dos condiciones y no logro recordar como se realiza: en el ejercicio tengo un listado de personas en otra columna cantidades, entonces me gustaría que al seleccionar a las personas (como unicas)  "columna A" , también sumara las cantidades que les corresponde en la "columna D".  Y las traspase al recuadro resumen que está con amarillo a la derecha. Lo hice, antes,  pero ha pasado un año y no he podido recordar como se realiza. Espero que me de a entender lo que pregunto. Gracias ejemplo.xlsx
    • Cuando puedas, sin prisa!! Muchas gracias!!
    • Bueno, sin libro de ejemplo ni detalles del escenario a mostrar, lo único que en mi caso puedo recomendar a la consulta es que verifique que no hay filtros o si los hay que muestre los datos en blanco. También usar un campo en la tabla de los que se llaman calculados para forzar que siempre haya algo.
    • Hola. Tengo un Excel . Varias columnas( curso,sexo, menor25,mayor54,nivel1,nivel2,nivel3). La cuestión es que al hacer una tabla dinámica cuyo esquema final sería: ((- Columna 1: Curso A   - Subcolumna Hombres   - Subcolumna Mujeres - Columna 2: Curso B   - Subcolumna Hombres   - Subcolumna Mujeres Y en las filas: - Mayor54 - Menor25 - Nivel de Estudios - Nivel de Espacio -Nivel de Cota)) Me ocurre que si en el curso A, solo hay dos hombres menores de 25 y ninguna mujer, no me aparece la subcolumnas mujer ni el total. He entrado en el diseño de tabla para crucear la opción para que lo dé, pero sin resultados. Mil gracias por contestar!!!
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy