Leer información de un archivo Excel

<< Clic para mostrar Tabla de Contenidos >>

Navegación:  Automatización de Procesos con poco código > Studio Cloud -ambiente de autoría > Bizagi Studio > Asistente de Procesos > Reglas de Negocio > Ejemplos de reglas de negocio > Documentos y archivos >

Leer información de un archivo Excel

Introducción

Se pueden cargar archivos de Excel a Bizagi para extraer la información en ellos y realizar diferentes operaciones de negocio.

 

note_pin

Es esencial asegurarse de que el archivo Excel que se utiliza sólo tenga la primera fila con títulos o encabezados. Si hay mas de una fila con títulos, las funciones no funcionarán correctamente.

 

Para obtener los datos de un archivo de Excel, use la siguiente función:

 

CHelper.GetDataTableFromWorkSheet(oFileData, iSheetId)

 

Los siguientes parámetros son necesarios:

oFileData: data de Excel.

iSheetId: índice de la hoja de Excel a leer. La primera hoja es 0.

 

Esta función retorna toda la información del archivo Excel como una tabla de datos (DataTable), ignorando los valores de la primera fila, que usualmente son campos con los títulos de las columnas. El tipo de dato de cada columna se mantiene con esta función. En caso de que desee obtener los valores como cadena de caracteres, use la siguiente función::

 

CHelper.GetDataTableFromWorkSheetAsString(oFileData, iSheetId)

 

Los siguientes parámetros son necesarios:

oFileData: data de Excel.

iSheetId: índice de la hoja de Excel a leer. La primera hoja es 0.

 

Cuando se importan fechas como String, puede usar la siguiente función para convertirlas a datos tipo Fecha:

FormatedDate = CHelper.FormatDate(dateAsString, "dddd, MMMM dd, yyyy hh:mm tt");

 

Tenga en cuenta que

Para que esta función funcione correctamente, la cultura del archivo Excel debe coincidir con la cultura en Bizagi. Si este no es el caso, se debe realizar la conversión por medio de Parse.

Todos los nombres de las columnas del archivo Excel se deben llamar de manera distinta. Si dos o más columnas tienen el mismo nombre, la función fallará.

Cuando el archivo contiene más de 10.000 registros, haga uso de la función en una tarea asíncrona que no muestre retroalimentación.

 

ReadExcelFile00

 

 

Ejemplo

Suponga que hay una tarea de proceso en la que los usuarios pueden cargar un archivo de Excel con informes de ventas mensuales y desea almacenar esos datos en una entidad de Bizagi. En este caso, la información se cargará a la recopilación de datos de ventas. La entidad tiene los siguientes atributos:

 

ReadExcelFile01

 

El archivo de Excel que se va a cargar tiene la siguiente estructura:

 

ReadExcelFile02

 

Después de que el usuario carga el archivo durante una tarea, esta regla se ejecuta para leer y guardar los datos en la colección:

 

ReadExcelFile03

 

La expresión es la siguiente:

// Obtener la colección de archivos

var oFile =<UploadExcel.MyFile>;

 

// Validar si existe un archivo

if(!oFile.size() > 0)

{

     CHelper.ThrowValidationError("Please load a file");

}

 

// Obtener el primer elemento de la colección y su data

var oFileDef = oFile.get(0);

var oFileDataDef = oFileDef.getXPath("Data");

 

// Extraer el contenido del archivo

var dtContenIn = CHelper.GetDataTableFromWorkSheet(oFileDataDef, 0);

 

// Ciclo para obtener cada registro y adicionalo a la entidad Sales Data

for(var j=0; j < dtContenIn.Rows.Count; j++)

{

 var oRecord = dtContenIn.Rows[j];

 var newRecord = Me.newCollectionItem("UploadExcel.salesData");

 newRecord.setXPath("Region",oRecord[0]);

 newRecord.setXPath("Country",oRecord[1]);

 newRecord.setXPath("ItemTypes",oRecord[2]);

 newRecord.setXPath("SalesChannel",oRecord[3]);

 newRecord.setXPath("OrderPriority",oRecord[4]);

 newRecord.setXPath("Orderdate",oRecord[5]);

 newRecord.setXPath("OrderID",oRecord[6]);

 newRecord.setXPath("ShipDate",oRecord[7]);

 newRecord.setXPath("Unitssold",oRecord[8]);

 newRecord.setXPath("Unitsprice",oRecord[9]);

 newRecord.setXPath("UnitCost",oRecord[10]);

 newRecord.setXPath("Totalrevenue",oRecord[11]);

 newRecord.setXPath("TotalCost",oRecord[12]);

 newRecord.setXPath("Totalprofit",oRecord[13]);

}

 

Tenga en cuenta que, en este ejemplo, los datos que el usuario carga van directamente a una colección, es por eso que se usa un bucle para agregar los registros directamente a la colección.

Cuando los datos de un archivo deben ir a una entidad maestra que no está modelada como una colección, puede crear una cadena XML para agregar los datos utilizando la función CEntityXmlHelper.fromXmlToEntity(inputXML).

 

La siguiente expresión lee el mismo archivo de Excel del ejemplo anterior y guarda los datos en la entidad de ventas utilizando la función fromXmlToEntity.

// Obtener la colección de archivos

var oFile =<UploadExcel.MyFile>;

 

// Validar si existe un archivo

if(!oFile.size() > 0)

{

     CHelper.ThrowValidationError("Please load a file");

}

 

// Obtener el primer elemento de la colección y su data

var oFileDef = oFile.get(0);

var oFileDataDef = oFileDef.getXPath("Data");

 

// Extraer el contenido del archivo como String

var dtContenIn = CHelper.GetDataTableFromWorkSheetAsString(oFileDataDef, 0);

 

// Empezar la concatenación del XML

var inputXML = "<BizAgiWSParam>";

inputXML += "<Entities>";

 

// Obtener la información de cada registro y agregarla a inputXML

for(var j=0; j<dtContenIn.Rows.Count; j++)

{

  var oRecord = dtContenIn.Rows[j];

 

  inputXML += "<Sales>";

  inputXML += "<Region>" + oRecord[0] + "</Region>";

  inputXML += "<Country>" + oRecord[1] + "</Country>";

  inputXML += "<OrderID>" + oRecord[6] + "</OrderID>";

  inputXML += "</Sales>";

}

 

inputXML += "</Entities>";

inputXML += "</BizAgiWSParam>";

 

// Guardar registros

var sResult = CEntityXmlHelper.fromXmlToEntity(inputXML);


Last Updated 4/12/2024 12:12:49 PM