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.
(http://blog.chefuri.com/wp-content/uploads/2012/08/excel.png)
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:http://screenr.com/wZTH (http://screenr.com/wZTH)