Crear un Archivo Excel con Epplus - Parte 3 - Crear Objeto para Parsear Archivo

Fecha de Publicación: 2019-07-13

Introducción

Si has llegado directamente te recomiendo visitar la serie de post anteriores para la libreria Epplus para que comiences el proyecto desde 0, si tu intención es solo resolver dudas continuemos.

Resultado

Las siguientes imagenes es lo que obtendremos al realizar la serie completa Crear un Archivo Excel con Epplus:

00_cees_00

Codigo Fuente

Descargar

Crear Objeto para Parsear Archivo


Ahora procederemos a crear una clase con la cual podamos guardar cada linea de los registros que tenemos en memoria. Eso lo hacemos de la siguiente manera en el Explorador de Soluciones dar clic derecho Agregar -> Nuevo elemento...



Seleccionaremos Clase y la llamaremos CodigosPostales:



La cual contendra un constructor y las propiedades correspondientes para manejar cada columna de nuestro archivo de codigos postales y que la puedes descargar aqui.

Ya creada nuestra clase, declararemos una lista en nuestro metodo Main la cual contendra objetos del tipo CodigosPostales que acabamos de crear, así mismo crearemos un metodo GetListCp en donde llenaremos esa lista quedando de la siguiente forma nuestra clase Main:

                
static void Main(string[] args)
    {
        string strWorkDir = string.Empty,
               strBuffer = string.Empty,
               strFileToWork = string.Empty,
               strFileToCreate = string.Empty;

        bool bRet = false;

        strWorkDir = ConfigurationManager.AppSettings["WorkDir"].ToString();

        strFileToWork = strWorkDir + ConfigurationManager.AppSettings["FileToWork"].ToString();

        strFileToCreate = strWorkDir + ConfigurationManager.AppSettings["FileToCreate"].ToString();

        strBuffer = File.ReadAllText(strFileToWork, Encoding.Default);

        List lstCp = null;

        lstCp = GetListCp(strBuffer);
    }
            
En esta linea que se ha agregado se ha declarado una lista y se ha llenado con el objeto CodigosPostales.
    
List lstCp = null;
    
y en esta linea se llena la lista llamando al metodo GetListCP
    
lstCp = GetListCp(strBuffer);
    
Y el metodo así:
    
static List GetListCp(string strBuffer)
{
    List lstCp = new List();

    foreach (string strLine in strBuffer.Split(new[] { "\r\n" }, StringSplitOptions.None))
    {
        string[] aryFields = strLine.Split(new[] { "|" }, StringSplitOptions.None);

        CodigosPostales cp = new CodigosPostales();

        for (int i = 0; i < aryFields.Count(); i++)
        {
            switch (i)
            {
                case 0:
                    if (!String.IsNullOrEmpty(aryFields[i]))
                    {
                        cp.DCodigo = ConvertToInt(aryFields[i]);
                    }
                    break;
                case 1:
                    cp.DAsenta = aryFields[i];
                    break;
                case 2:
                    cp.DTipoAsenta = aryFields[i];
                    break;
                case 3:
                    cp.DMnpio = aryFields[i];
                    break;
                case 4:
                    cp.DEstado = aryFields[i];
                    break;
                case 5:
                    cp.DCiudad = aryFields[i];
                    break;
                case 6:
                    if (!String.IsNullOrEmpty(aryFields[i]))
                    {
                        cp.DCP = ConvertToInt(aryFields[i]);
                    }
                    break;
                case 7:
                    cp.CEstado = aryFields[i];
                    break;
                case 8:
                    cp.COficina = aryFields[i];
                    break;
                case 9:
                    if (!String.IsNullOrEmpty(aryFields[i]))
                    {
                        cp.CCP = ConvertToInt(aryFields[i]);
                    }
                    break;
                case 10:
                    if (!String.IsNullOrEmpty(aryFields[i]))
                    {
                        cp.CTipoAsenta = ConvertToInt(aryFields[i]);
                    }
                    break;
                case 11:
                    if (!String.IsNullOrEmpty(aryFields[i]))
                    {
                        cp.CMnpio = ConvertToInt(aryFields[i]);
                    }
                    break;
                case 12:
                    if (!String.IsNullOrEmpty(aryFields[i]))
                    {
                        cp.IdAsentaCPCons = ConvertToInt(aryFields[i]);
                    }
                    break;
                case 13:
                    cp.DZona = aryFields[i];
                    break;
                case 14:
                    if (!String.IsNullOrEmpty(aryFields[i]))
                    {
                        cp.CCveCiudad = ConvertToInt(aryFields[i]);
                    }
                    break;
            }
        }

        lstCp.Add(cp);
    }
    return lstCp;
}
        
    
Este metodo lo que nos regresa es una lista del tipo CodigosPostales de una cadena de texto que recibe como argumento despues crea una lista igual del tipo CodigosPostales para poder llenarla y regresarla al final de la ejecución del metodo despues se ejecuta la instrucción foreach la cual tiene en su declaración un split que divide el buffer por renglon y nos permite trabajar linea por linea a continuación de forma similar se separa cada linea por el caracter | y se guarda el resultado de cada linea en un arreglo en este momento ya tenemos preparados nuestros datos pora poder guardarlos en un objeto del tipo CodigosPostales entonces se itera el arreglo con los datos y con un case se guardan en cada una de las propiedades del objeto CodigosPostales al finalizar el ciclo de cada linea se guarda el objeto en la lista con la instrucción:
    
lstCp.Add(cp);
    
Donde cp es el objeto individual de codigos postales y el foreach se repetira n veces como lineas tenga el archivo origen, al finalizar la lista de codigos postales estara completa.

Ahora realizaremos una prueba de ejecución y el resultado debe ser similar al siguiente:




Hemos terminado con la creación del objeto y su llenado estamos listos para crear el archivo Excel pero eso sera para nuestra siguiente entrega de esta serie. En la parte de abajo da click en el enlace Siguiente para continuar con el ejercicio.