miércoles, 27 de septiembre de 2017

Convertir xlsx & xls a csv con ExcelDataReader



En este artículo voy a tratar de explicar cómo utilizar la biblioteca ExcelDataReader para la conversión simple de archivos, en particular Excel para CSV. Convierta fácilmente sus archivos Excel 97-2003 (.xls) o 2007 (.xlsx) en archivos simples de valores separados por comas (.csv).

Dado que CSV es un archivo de flujo simple, es más fácil tratar con los datos del archivo. Recuerda que los datos CSV también se pueden ver como una hoja de Excel.

Bueno, manos a la obra...
El objetivo concreto es leer los datos de un archivo Excel en el programa y convertirlo en un formato fácil de operar que es CSV; utilizando la librería ExcelDataReader. Todo esto en .NET para este caso. ( creo que pronto publico una versión Java correspondiente ).

Primer paso es agregar las referencias de la biblioteca ExcelDataReader a su proyecto ( Buscar en Nuget ExcelDataReader )



Aqui te dejo el video con la implementacion del código




De cualquier manera tambien te pongo aquí la implementación del código.

private void ExcelToCsv()
        {
            try
            {
                // crear el stream del archivo xlxs o xls existente
                FileStream stream = File.Open("C:\\HistoricoChat.xlsx", FileMode.Open, FileAccess.Read);

                // Reading from a binary Excel file ('97-2003 format; *.xls)
                // IExcelDataReader excelReaderXls = ExcelReaderFactory.CreateBinaryReader(stream);

                // Reading from a OpenXml Excel file (2007 format; *.xlsx)
                IExcelDataReader excelReaderXlsx = ExcelReaderFactory.CreateOpenXmlReader(stream);

                string csvData = string.Format("{0},{1},{2},{3},{4}", "N. PROVEEDOR", "NOMBRE PROVEEDOR", "FECHA", "MOTIVO DE AYUDA", "DURACION CHAT");             
                int row = 0;
                while (excelReaderXlsx.Read())
                {
                    if (row > 0)
                        csvData += string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\"",
                            excelReaderXlsx.GetValue(0),    // proveedor id
                            excelReaderXlsx.GetString(1),   // proveedor
                            excelReaderXlsx.GetString(2),   // fecha
                            excelReaderXlsx.GetString(3),   // motivo de ayuda
                            excelReaderXlsx.GetString(4));  // duracion chat

                    csvData += "\n";
                    row++;
                }

                // Free resources (IExcelDataReader is IDisposable)
                excelReaderXlsx.Close();

                // define tu propia salida de archivo csv ( en este caso lo mandé a mi unidad extraible )
                string output = "D:\\HistoricoChat.csv";
                StreamWriter csv = new StreamWriter(@output, false);
                csv.Write(csvData);
                csv.Close();
            }
            catch (Exception ex)
            {
                var exx = ex;
            }
        }



domingo, 17 de septiembre de 2017

El punto de interrupcion no se activara actualmente en visual studio

Trabajando un poco en un proyecto personal de desarrollo, me encontré con la novedad de que en mi visual studio 2015 no se me activa un punto de interrupción que puse en un método del cotroller, es decir ni si quiera es alcanzado ya que al parecer el código existente en modo de ejecución no es igual al de la version compilada. ( de alguna manera al compilar la solución, no se esta actualizando las propias librerias, dlls, etc ).

El mensaje dice que el punto de interrupción no se activará actualmente ya que el codigo fuente actual es distinto al de la versión compilada...

A este problema el propio visual studio me sugiere activar una condición en la configuración del punto de interrupción, para "permitir que el código fuente sea distinto del de la versión original"; solución que no me funcionó por cierto .... les muestro la imagen



Para quienes tengan esta situación pueden probar alguna de las siguientes opciones:


  1. Limpiar y generar de nuevo..
  2. Ir a Condiciones... Configuracion y Ubicacion y active 'Permite que el código fuente sea distinto del de la versión original.
  3. Volver a generar la carpeta local de la solucion eliminando la carpeta previamente.  ( en mi caso como utilizo TFS, lo que hice fue quitar la asignacion de la carpeta (recursivo) y luego cree la asignacion a mi local nuevamente ). Esta tercer opción fue la que me funcionó.


Despues de darle vueltas un rato y probar con la opcion 3 se solucionó el tema y pude ejecutar los breakpoint.   Saludos.