Conexión entre Ruby y una instancia en ejecución de Excel

Estándar

Anteriormente había mencionado como crear una instancia de Excel desde Ruby, añadir un libro y escribir algo de texto en las celdas de la hoja activa. En esta ocasión voy a hablar de cómo conectarse desde Ruby a una instancia de Excel en ejecución.

Veamos algo de código…


require 'win32ole'
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
workbook = excel.Workbooks.Add()
worksheet = workbook.Worksheets(1)
worksheet.Range("A1:D1").value = ["North","South","East","West"]
worksheet.Range("A2:B2").value = [5.2, 10]
worksheet.Range("C2").value = 8
worksheet.Range("D2").value = 20
range = worksheet.Range("A1:D2")
range.select
chart = workbook.Charts.Add
workbook.saved = true
excel.ActiveWorkbook.Close(0)
excel.Quit()

El código anterior crea una nueva instancia de Excel, la hace visible, agrega un libro, agrega unos datos a la hoja 1 y a partir de ellos crea grafico para luego cerrar el libro sin necesidad de guardarlo y cierra la instancia previamente creada. Este código si lo guardan como un script de Ruby, con la extensión “.rb” y lo ejecutan, será tan rápido que si parpadean no verán nada.

Pero habrá casos en los que haya que trabajar o procesar datos de un libro que ya se encuentra abierto y como hacer eso, bueno solo habría que cambiar una línea del código anterior, en donde se crea la instancia de Excel:


excel = WIN32OLE.new('Excel.Application')

la cual quedaría asi:


excel = WIN32OLE.connect('Excel.Application')

Con este cambio, Ruby no crea una instancia, sino que se conecta a la instancia de Excel en ejecución.

Aqui tienen un video para mas detalle al respecto: Ruby/Excel Tutorial 002

Anuncios

7 comentarios en “Conexión entre Ruby y una instancia en ejecución de Excel

  1. I like the valuable info you provide in your articles. I’ll bookmark your weblog and check again here regularly. I am quite certain I will learn plenty of new stuff right here! Good luck for the next!

  2. rocio

    Llevo varios dias atascada en ese problema, cambiar los datos de un excel creado, y aunque he probado tu solución, no he visto ningun cambio en mi hoja de datos. El excel parpadea, se cierra, y al abrirlo sigue exactamente igual…

    • Hola Rocio! por lo que he leido de tu problema, me suena a que no estas guardando el libro!

      En el el ejemplo que pongo se crea un libro, se ponen unos datos y a partir de ellos se crea un grafico, pero no se guarda el libro… la intruccion:

      workbook.saved = true

      le indica a Excel que el libro no se a modificado (esta intruccion no guarda el libro), por eso cuando cierro el libro no me aparece el mensaje de guardar. Tal vez sea eso lo que te hace falta.

      He aqui el codigo que crea y guarda el libro al disco duro (usando excel 2007 o superior):

      require ‘win32ole’
      excel = WIN32OLE.new(‘Excel.Application’)
      excel.visible = true
      workbook = excel.Workbooks.Add()
      worksheet = workbook.Worksheets(1)
      worksheet.Range(“A1:D1”).value = [“North”,”South”,”East”,”West”]
      worksheet.Range(“A2:B2”).value = [5.2, 10]
      worksheet.Range(“C2”).value = 8
      worksheet.Range(“D2”).value = 20
      range = worksheet.Range(“A1:D2”)
      range.select
      chart = workbook.Charts.Add
      workbook.saveas “c:prueba.xlsx”
      excel.ActiveWorkbook.Close(0)
      excel.Quit()

  3. rocio

    Justo lo que habiamos hecho. Es un excel ya creado y con graficos vinculados a un word.
    Dejo el codigo aqui por si le puede ayudar a alguien:

    require ‘win32ole’

    excel = WIN32OLE.new(‘Excel.Application’)
    excel.visible = true
    workbook = excel.Workbooks.Open(‘ruta de tu archivo’)
    worksheet = workbook.Worksheets(1) # aqui elegimos la hoja que queramos

    worksheet.Range(“A1”).value = 6

    workbook.Save
    workbook.Close(0)

    Todavia estoy probando para ver como funciona lo de los vinculos.
    Un saludo y muchísimas gracias

  4. rocio

    Por cierto, si alguien lo hace, no vale con abrir el word, aunque te ponga que tiene datos vinculados y que si quieres actualizar, por ahora tengo que irme al grafico y actualizar datos…

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s