Ejemplo n.º 1
0
        public IDictionary <ExcelDataType, object> ReadTable(IXLTable table)
        {
            int rows        = table.RowCount();
            int columns     = table.ColumnCount();
            var numericData = new double?[rows, columns];
            var textData    = new string[rows, columns];
            var formula     = new string[rows, columns];

            for (int i = 1; i <= rows; i++)
            {
                for (int j = 1; j <= columns; j++)
                {
                    IXLCell cell = table.Cell(i, j);
                    switch (cell.DataType)
                    {
                    case XLDataType.Number:
                        numericData[i - 1, j - 1] = cell.GetDouble();
                        break;

                    case XLDataType.Text:
                    {
                        string textValue = GetSingleCellTextValue(cell);
                        KeyValuePair <ExcelDataType, object> parsed = ParseString(textValue);

                        switch (parsed.Key)
                        {
                        case ExcelDataType.Numeric:
                            numericData[i - 1, j - 1] = (double)parsed.Value;
                            break;

                        case ExcelDataType.Text:
                            textData[i - 1, j - 1] = textValue;
                            break;

                        default:
                            throw new NotImplementedException("I haven't implemented formulas yet");
                        }
                        break;
                    }
                    }

                    if (cell.HasFormula)
                    {
                        formula[i - 1, j - 1] = cell.FormulaA1;
                    }
                }
            }
            return(new Dictionary <ExcelDataType, object>
            {
                { ExcelDataType.Numeric, numericData },
                { ExcelDataType.Formulae, formula },
                { ExcelDataType.Text, textData }
            });
        }
        private List <string> ObtenerListaDeClasesDesdeXlsx(IXLWorksheet hoja, out List <ZonaDePosicionamiento> listaZonaDePosicionamientos)
        {
            var listaDeErrores = new List <string>();

            listaZonaDePosicionamientos = new List <ZonaDePosicionamiento>();
            try
            {
                // Los indices siempre son 1, 2, 3 y 4 porque son las columnas del XLSX generado en la descarga de plantilla, la cual es la aceptada para la carga.
                const int indiceBodegas    = 1;
                const int indiceZona       = 2;
                const int indiceMandatorio = 3;
                const int indiceFamilia    = 4;

                // Almacena los registros de la plantilla en TablaIXL
                IXLTable tableClass = hoja.Table("Clases");

                var cantidadFilas = tableClass.RowCount();

                // Obtiene la fila de los encabezados
                var primeraFilaUsada = tableClass.FirstRowUsed();
                var fila             = primeraFilaUsada.RowUsed();

                // Baja una fila para leer la data
                fila = fila.RowBelow();
                var indice = 2;

                // Recorre las filas de la tabla sin contar el encabezado.
                for (int i = 1; i < cantidadFilas; i++)
                {
                    // Valida que las columnas tengan data

                    if (string.IsNullOrEmpty(fila.Cell(indiceBodegas).GetString()) || string.IsNullOrEmpty(fila.Cell(indiceZona).GetString()) || string.IsNullOrEmpty(fila.Cell(indiceMandatorio).GetString()) || string.IsNullOrEmpty(fila.Cell(indiceFamilia).GetString()))
                    {
                        var mensaje = $"La fila No.{indice} tiene campos vacios.";
                        listaDeErrores.Add(mensaje);
                    }
                    else
                    {
                        var zonaPosicionamiento = new ZonaDePosicionamiento
                        {
                            WAREHOUSE_CODE = fila.Cell(indiceBodegas).GetString()
                            ,
                            ZONE = fila.Cell(indiceZona).GetString()
                            ,
                            MANDATORY = (fila.Cell(indiceMandatorio).GetString().Equals("Si"))
                            ,
                            FAMILY = int.Parse(fila.Cell(indiceFamilia).GetString())
                        };
                        Console.WriteLine(zonaPosicionamiento);
                        // Agrega las clases encontradas en el XLSX a la lista de clases
                        listaZonaDePosicionamientos.Add(zonaPosicionamiento);
                    }

                    // Baja una fila para continuar leyendo el XLSX
                    fila = fila.RowBelow();
                    indice++;
                }
            }
            catch (Exception e)
            {
                InteraccionConUsuarioServicio.Alerta($"Error al leer la hoja de Familia: {e.Message}");
            }
            return(listaDeErrores);
        }