コード例 #1
0
        private void RecorrerExcel(string filePath, object sender)
        {
            var workbook  = new XLWorkbook(filePath);
            var workSheet = workbook.Worksheets.FirstOrDefault();

            int linea = 2;

            ListaDeErrores       = new List <Error>();
            CargaManifiestoExcel = new List <CargaManifiesto>();
            var firstRow = true;

            foreach (var row in workSheet.Rows())
            {
                if (firstRow)
                {
                    if (PlantillaDocs.Where((t, i) => row.Cell(i + 1).Value.ToString() != t.VALUE).Any())
                    {
                        EstablecerError("El encabezado no coincide con el de la Plantilla proporcionada, por favor descargar la Plantilla en esta pagina para evitar Errores", sender);
                        break;
                    }
                    firstRow = false;
                }
                else
                {
                    if (row.Cell(1).Value.ToString() == "" && row.Cell(2).Value.ToString() == "" &&
                        row.Cell(3).Value.ToString() == "" && row.Cell(4).Value.ToString() == "" &&
                        row.Cell(5).Value.ToString() == "" && row.Cell(6).Value.ToString() == "" &&
                        row.Cell(7).Value.ToString() == "" && row.Cell(8).Value.ToString() == "" &&
                        row.Cell(9).Value.ToString() == "" && row.Cell(10).Value.ToString() == "" &&
                        row.Cell(11).Value.ToString() == "")
                    {
                        break;
                    }

                    for (int i = 1; i <= 11; i++)
                    {
                        if (row.Cell(i).Value.ToString() == string.Empty)
                        {
                            ListaDeErrores.Add(new Error
                            {
                                ERROR =
                                    "Falta la propiedad  " + PlantillaDocs[i - 1].VALUE + " por favor revisar, fila: " + linea,
                                LINEA = linea
                            });
                        }
                    }

                    if (!ValidarTipoCelda(row.Cell(1).DataType, XLCellValues.Number))
                    {
                        ListaDeErrores.Add(new Error
                        {
                            ERROR =
                                "Error de formato de numero, celda de Excel debe tener formato Number, fila: " + linea,
                            LINEA = linea
                        });
                    }

                    if (!ValidarGPS(row.Cell(5).Value.ToString()) || !ValidarTipoCelda(row.Cell(5).DataType, XLCellValues.Text))
                    {
                        ListaDeErrores.Add(new Error
                        {
                            ERROR =
                                "Error de formato de GPS, celda de Excel debe tener formato (##.####, ##.####), fila: " + linea,
                            LINEA = linea
                        });
                    }

                    if (!ValidarTipoCelda(row.Cell(6).DataType, XLCellValues.DateTime))
                    {
                        ListaDeErrores.Add(new Error
                        {
                            ERROR =
                                "Error de formato de fecha, celda de Excel debe tener formato Date, fila: " + linea,
                            LINEA = linea
                        });
                    }

                    if (!(ValidarTipoCelda(row.Cell(7).DataType, XLCellValues.Number) || ValidarTipoCelda(row.Cell(7).DataType, XLCellValues.DateTime)))
                    {
                        ListaDeErrores.Add(new Error
                        {
                            ERROR =
                                "Error de formato de Hora, celda de Excel debe tener formato Hora, fila: " + linea,
                            LINEA = linea
                        });
                    }
                    if (!ValidarTipoCelda(row.Cell(11).DataType, XLCellValues.Number))
                    {
                        ListaDeErrores.Add(new Error
                        {
                            ERROR =
                                "Error de formato de cantidad, celda de Excel debe tener formato Number, fila: " + linea,
                            LINEA = linea
                        });
                    }

                    try
                    {
                        if (ListaDeErrores.Count < 1)
                        {
                            var item = new CargaManifiesto
                            {
                                NumeroDocumento       = row.Cell(1).Value.ToString(),
                                CodigoCliente         = "Ex|" + row.Cell(2).Value.ToString(),
                                NombreCliente         = row.Cell(3).Value.ToString(),
                                DireccionCliente      = row.Cell(4).Value.ToString(),
                                GPSCliente            = row.Cell(5).Value.ToString(),
                                FechaVisita           = Convert.ToDateTime(row.Cell(6).Value.ToString()),
                                HoraRecomendadaVisita = row.Cell(7).DataType == XLCellValues.DateTime ? Convert.ToDateTime(row.Cell(7).Value.ToString()).TimeOfDay : TimeSpan.FromDays(Convert.ToDouble(row.Cell(7).Value.ToString())),
                                Comentario            = row.Cell(8).Value.ToString(),
                                NombreSKU             = row.Cell(9).Value.ToString(),
                                CodigoSKU             = row.Cell(10).Value.ToString(),
                                Cantidad = Convert.ToDouble(row.Cell(11).Value.ToString()),
                            };
                            CargaManifiestoExcel.Add(item);
                        }
                    }
                    catch (Exception ex)
                    {
                        EstablecerError("Ocurrió un error inesperado de formato en la fila " + linea + ", por favor revisar sus datos.", sender);
                    }
                    linea++;
                }
            }

            if (ListaDeErrores.Count > 0)
            {
                EstablecerMultiplesErrores(ListaDeErrores, sender);
            }
        }
        protected void UiBotonCargarArchivo_FileUploadComplete(object sender, FileUploadCompleteEventArgs e)
        {
            ListaDeErrores            = new List <Error>();
            Session["ListaDeErrores"] = ListaDeErrores;
            var errorEncabezado = false;
            var errorFecha      = false;
            int linea           = 2;

            try
            {
                IniciarMvx();
                var filePath = HttpContext.Current.Server.MapPath("~/UploadedFiles/SalesOrders/sale_order.xlsx");
                if (!Directory.Exists(HttpContext.Current.Server.MapPath("~/UploadedFiles/SalesOrders")))
                {
                    Directory.CreateDirectory(
                        HttpContext.Current.Server.MapPath("~/UploadedFiles/SalesOrders"));
                }
                e.UploadedFile.SaveAs(filePath);

                var workbook  = new XLWorkbook(filePath);
                var workSheet = workbook.Worksheets.FirstOrDefault();


                var lista    = new List <OrdenDeVentaExcel>();
                var firstRow = true;

                foreach (var row in workSheet.Rows())
                {
                    if (firstRow)
                    {
                        if (PlantillaDocs.Where((t, i) => row.Cell(i + 1).Value.ToString() != t.VALUE).Any())
                        {
                            errorEncabezado = true;
                            EstablecerError("El encabezado no coincide con el de la Plantilla proporcionada, por favor descargar la Plantilla en esta pagina para evitar Errores", sender);
                            break;
                        }
                        firstRow = false;
                    }
                    else
                    {
                        if (row.Cell(1).Value.ToString() == "" && row.Cell(2).Value.ToString() == "" &&
                            row.Cell(3).Value.ToString() == "" && row.Cell(4).Value.ToString() == "")
                        {
                            break;
                        }

                        if (!ValidarTipoCelda(row.Cell(2).DataType, XLCellValues.DateTime))
                        {
                            ListaDeErrores.Add(new Error
                            {
                                ERROR =
                                    "Error de formato de fecha, celda de Excel debe tener formato Date, linea: " + linea,
                                LINEA = linea
                            });
                        }

                        if (!ValidarTipoCelda(row.Cell(4).DataType, XLCellValues.Number))
                        {
                            ListaDeErrores.Add(new Error
                            {
                                ERROR =
                                    "Error de formato de cantidad, celda de Excel debe tener formato Number, linea: " + linea,
                                LINEA = linea
                            });
                        }

                        var item = new OrdenDeVentaExcel
                        {
                            CLIENT_ID       = row.Cell(1).Value.ToString(),
                            POSTED_DATETIME = row.Cell(2).Value.ToString(),
                            SKU             = row.Cell(3).Value.ToString(),
                            QTY             = row.Cell(4).Value.ToString()
                        };
                        lista.Add(item);
                        linea++;
                    }
                }
                if (errorEncabezado == false)
                {
                    var fechaDeEntrega = DateTime.Today.AddDays(1).ToString();
                    var idCliente      = workSheet.Cell(2, 1).Value.ToString();
                    if (IsDateClass.IsDate(workSheet.Cell(2, 2).Value))
                    {
                        fechaDeEntrega            = workSheet.Cell(2, 2).Value.ToString();
                        Session["FechaDeEntrega"] = fechaDeEntrega;
                    }
                    else if (IsDateClass.IsDate(workSheet.Cell(3, 2).Value))
                    {
                        fechaDeEntrega            = workSheet.Cell(3, 2).Value.ToString();
                        Session["FechaDeEntrega"] = fechaDeEntrega;
                    }
                    if (workSheet.Cell(2, 1).Value.ToString() == "" && workSheet.Cell(2, 2).Value.ToString() == "" &&
                        workSheet.Cell(3, 2).Value.ToString() == "")
                    {
                        EstablecerError("Archivo vacio o invalido", sender);
                        errorFecha = true;
                    }
                    if (errorFecha == false)
                    {
                        ValidarClienteYObtenerSkusDeListaDePrecios?.Invoke(sender,
                                                                           new ValidacionSkuPorClienteArgumento()
                        {
                            OrdenDeVentaDetallesExcel = lista,
                            IdCliente    = idCliente,
                            FechaEntrega = fechaDeEntrega,
                            login        = Session["LOGIN"].ToString()
                        });
                        Session["CargadoDeExcel"] = true;
                    }
                }
            }
            catch (Exception ex)
            {
                EstablecerError(ex.Message, sender);
            }
        }