<< Clic para mostrar Tabla de Contenidos >> 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.
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.
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:
El archivo de Excel que se va a cargar tiene la siguiente estructura:
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:
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