none
Recorrer excel por columnas en C# RRS feed

  • Pregunta

  • Buen día comunidad, estoy pegado en un problema que estoy seguro que es algo mínimo resulta que estoy haciendo un aplicativo en .Net con MVC 2 (ASPX). y tengo unos excel que se suben mediante fileupload a distintas tablas en la BBDD todo bien recorro completamente bien el excel cuando es hacia el lado me explico con esta imagen

    Recorre fila

    Cuando se trata de recorrer por fila de izquierda a derecha puedo capturar bien los datos con este codigo

    DataTable dt = ds.Tables[0];
    
    
                String format = "yyyy/MM/dd"; // formato de fecha Año mes dia incluyendo los 0 para buscar por fecha específica
                String formatsql = "yyyy-MM-dd HH:mm:ss";
                CultureInfo chile = new CultureInfo("es-CL");
    
                MVELEntitiess dbCont = new MVELEntitiess();
                var fechames = DateTime.Now.AddMonths(-1);
                string mesconcero = fechames.ToString(format);
                string messolo = mesconcero.ToString().Substring(5, 2);
    
                var tbtasacambio = dbCont.Set<tb_tasa_cambio>();
                var fecha = dt.Rows[2];
                foreach (DataRow dnom in dt.Rows)
                {
                    //creo una variable que situa en la posicion cero mi Nombre de barra
                    var dia = dnom[0].ToString();
                    string fechasubstring = fecha + "/" + dia;
                    var fechatotal = Convert.ToDateTime(fechasubstring);
                    var valorDolar = dnom[1];
                    String fechasql1 = fechatotal.ToString(formatsql);
                    var diasubs = fechasql1.ToString().Substring(8, 2);
                    string descripcion = "Dolar";
                    var selectId = dbCont.tb_tasa_cambio.Where(w => w.Fecha.ToString().ToLower() == fecha.ToString().ToLower()).AsEnumerable().Select(s => s.Id).ToList(); // Igualo el nombre del archivo excel con la descripcion de la barra
                    var id2 = dbCont.tb_tasa_cambio.Select(s => s.Id).ToList();
                    int idvalormax = id2.Max();
                    int idsql = idvalormax + 1;
                    if (selectId.Count() >= 0)//Si el nombre existe en la BBDD realiza el proceso
                    {
    
    
                        DataRow[] drExcel = ds.Tables[0].Select("Dia = '" + diasubs + "'");
    
                        var count = from query5 in dbCont.tb_tasa_cambio//Query para comparar datos obtenidos de excel con la DDBB si es != de null se actualiza
                                    where query5.Fecha.ToString().ToLower() == fecha.ToString().ToLower() && query5.Valor.ToString().ToLower() == valorDolar.ToString().ToLower()
                                    && query5.Descripcion_moneda.ToString().ToLower() == descripcion.ToString().ToLower()
                                    select query5;
    
    
                        if ((count != null) && (count.Count() > 0))
                        {
                            var update = from query5 in dbCont.tb_tasa_cambio//Query para comparar datos obtenidos de excel con la DDBB si es != de null se actualiza
                                         where query5.Fecha.ToString().ToLower() == fecha.ToString().ToLower() && query5.Valor.ToString().ToLower() == valorDolar.ToString().ToLower()
                                         && query5.Descripcion_moneda.ToString().ToLower() == descripcion.ToString().ToLower()
                                         select query5;
    
    
                            foreach (var campos in update)
                            {
    
                                campos.Valor = Convert.ToDecimal(valorDolar);
    
                            }
                            dbCont.SaveChanges();
                        }
                        else
                        {
                            if ((count == null) || (count.Count() == 0))
                            {
                                tbtasacambio.Add(new tb_tasa_cambio
                                {
    
                                    Descripcion_moneda = Convert.ToString(descripcion),
                                    Id = Convert.ToInt32(idsql),
                                    Valor = Convert.ToDecimal(valorDolar),
                                    Fecha = Convert.ToDateTime(fechasql1),
    
    
                                });
                                dbCont.SaveChanges();
                                //}
    
    
                            }
                        }
                    }
                    else // Si no existe envía una alerta pero carga el resto
                    {
                        ViewBag.ErrorMessage = "No se ha podido actualizar/insertar" + " " + valorDolar + fechasubstring;
    
                    }
                }
            }

    Pero cuando la plantilla excel viene con datos apilados mediante columnas me explico en esta imagen

    Recorrer columna

    Nose como hacerlo alguna idea?. El primer ejemplo lo hago con foreach y resulta bien, mi problema es recorrer el excel en este caso empresas es el nombre de mis columnas y los valores estan hacia abajo.

    Se agradece respuesta.


    Joel Baez

    lunes, 11 de junio de 2018 16:25