Herramientas personales
 

Como Integrarse con Excel

De

Aplica para la EDICIÓN ENTERPRISE .NET

Como Integrarse con Excel

No es inusual que un proyecto requiera la transferencia de datos desde/hacia un archivo de Excel, ya sea para generar un informe, incluir información de un sistema externo en el modelo de datos Bizagi o incluso la ejecución de una operación compleja con una macro existente. Sea cual sea el caso, esto implicará el uso de un componente que tiene que ser registrado en Bizagi con el fin de usarlo en una Expresión (vea Librería de Componentes)

Buscanco en la Web se pueden encontrar algunos componentes listos para usar. Aunque el uso de estas librerías es la forma más rápida para manejar archivos de Excel, algunas de las soluciones no tienen plena compatibilidad con Excel y la mayoría (si no todos) tienen que ser comprados. Una alternativa es utilizar Automatización. Prácticamente la totalidad de las acciones que se pueden realizar de forma manual a través de la interfaz de usuario también se puede realizar mediante programación.

En Soporte Microsoft se pueden encontrar varios articulos con ejemplos sobre Automatización de Excel:


Ejemplo

El siguiente es un ejemplo de cómo la automatización puede ser utilizada para integrar Bizagi con Excel. Se asume que la organización (un banco) tiene un archivo de Excel que contiene todas las operaciones necesarias para determinar el pago mensual de una hipoteca. Parte de la información necesaria en el archivo de Excel se extrae de Bizagi y el resultado se almacena en Bizagi. Descargar el archivo desde aquí: MortgageCalculator.xls



En Bizagi existiría una forma en la cual se ingresa la tasa de interés anual, el plazo de la hipoteca y el monto. Después que esta información ha sido ingresada, se hace clic en el botón Calcular, lo que hará que se ejecute una Expresión en la cual se utiliza el método de una librería personalizada para determinar el pago mensual de la hipoteca.



La Expresión tendría las siguientes instrucciones:


//Obtener la  información ingresada en la forma
var rate = <MortgageApplication.AnnualInterestRate>;
var term = <MortgageApplication.MortgageTerm>;
var amount = <MortgageApplication.MortgageAmount>;

//Establecer la ruta del archivo Excel
var file = "D:\\Temp\\MortgageCalculator.xls";

//Utilizar el método del componente que recibe como parámetros la tasa de interés anual, 
//el plazo de la hipoteca en años, el monto y la ruta del archivo.
//El resultado se guarda en una variable
var payment = BizagiExcelIntegration.CInvokeExcel.MortgageMonthlyPayment(rate, term, amount, file);

//Guardar el resultado en un atributo no editable incluido en la forma
Me.setXPath("MortgageApplication.MonthlyPayment", payment);


Adicionalmente, es necesario crear el componente usado en esta Expresión. Con la ayuda de Microsoft Visual Studio .NET, cree un nuevo Proyecto de Librería de Clases. Para este ejemplo, el proyecto se llama BizagiExcelIntegration. Incluya una clase llamada CInvokeExcel que tenga el método MortgageMonthlyPayment. Para poder probar el ejemplo presentado aqui, descargue y extraiga este componente: BizagiExcelIntegration.rar.

Este sería el código de la clase CInvokeExcel:


using System;
using InteropExcel;

namespace BizagiExcelIntegration
{
    public class CInvokeExcel
    {
        public CInvokeExcel()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public static double MortgageMonthlyPayment(double AnnualRate, double YearsTerm, double MortgageAmount, string FilePath)
        {
            //Crear la instancia Excel con el archivo dado
            CExcelDataSourceSingleton cExcel = new CExcelDataSourceSingleton();
            cExcel.Target = FilePath;

            //Usar SetCellValue para copiar AnnualRate (tasa anual), YearsTerm (plazo en años) y MortgageAmount (monto de la hipoteca) en la hoja Excel
            cExcel.SetCellValue(1, "C4", AnnualRate);
            cExcel.SetCellValue(1, "C6", YearsTerm);
            cExcel.SetCellValue(1, "C8", MortgageAmount);

            //Utilizar este objeto para recibir el valor calculado por Excel
            object oRetVal = cExcel.GetCellValue(1, "C10");

            cExcel.CloseFile();

            double dReturn = Convert.ToDouble(oRetVal);

            return dReturn;
        }
    }
}


La segunda linea (using InteropExcel), significa que esta librería usa otra librería, la cual que contiene la clase CExcelDataSourceSingleton. Es un componente intermedio entre Microsoft.Office.Interop.Excel y la anterior librería; por lo tanto el proyecto BizagiExcelIntegration debe tener una referencia a esta otra librería. Esta clase ya compilada puede ser descargada y extraida de aquí: InteropExcel.rar.

Cuando se genere el proyecto, los siguientes tres componentes se podran encontrar en ruta de resultados: BizagiExcelIntegration.dll, InteropExcel.dll y Interop.Microsoft.Office.Interop.Excel.dll. Todods estos componentes se deben registrar en Bizagi usando la herramienta Libreria de Componentes.



Luego de realizar las configuraciones necesarias, es posible ensayar este ejercicio en la aplicación web.