Ir al contenido principal

Exportar Archivos en C# con NPOI


Siempre que se tiene que exportar un archivo, se tienen varias opciones; se puede pensar en usar reporting services, se puede usar librerías que se encuentran en la red, se pueden usar librerías especificas de .NET, pero hoy vamos a ver como usar la librería NPOI.

La librería NPOI es una librería de código abierto que se usa para parsear data en archivos de excel, en este caso vamos a usar  un data set  para realizar toda la operación.

Se va a crear un libro de excel con extensión xlsx, en el cual se va a crear la plantilla que se requiere para poder visualizar la data y la gráfica correspondiente.
se crea el método dentro del cual se tendrá la lógica 

       public void ejemplonpoi()
          { }
Se crean la variables necesarias para realizar la conversión del archivo
            var extension = "xlsx";
            string result = Path.GetTempPath();
            DataSet dt = new DataSet();
            dt = (DataSet)Session["ListData"];
            MemoryStream ms = new MemoryStream();
            string[] r =
                {
                    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",                          "P", "Q", "R",
                    "S", "T"
                };
Variable que contiene la ruta donde se deja la plantilla
            string filename = @"‪C:\Users\Desarrollo\Desktop\prueba.xlsx";

Se obtiene el nombre del archivo

         filename = Environment.GetFolderPath(Environment.SpecialFolder.Resources) + "\\" +         Path.GetFileName(filename);

Se crea el libro de trabajo

          IWorkbook workbook = new HSSFWorkbook();
          using (var file = new FileStream(@"D:\prueball.xlsx", FileMode.Open,      FileAccess.ReadWrite))      
                  {
                      workbook = new XSSFWorkbook(file);
                  }
Se lee el data set y en este caso cada datatable se mete en una hoja diferente del excel
                foreach (DataTable table in dt.Tables)
                  {
                      //Add a new worksheet to workbook with the Datatable name
                      ISheet sheet1 = "Nombre de la hoja en la que se va a ingresar la data";
                      for (int i = 0; i < table.Rows.Count; i++)
                      {
                          IRow row = sheet1.GetRow(i+1);
                          for (int j = 1; j < table.Columns.Count; j++)
                          {
                              ICell cell = row.CreateCell(j);
                              String columnName = table.Columns[j].ToString();
                              cell.SetCellValue(Convert.ToInt32(table.Rows[i][columnName].ToString()));
                          }
                      }
                  }

Por ultimo se obliga la descarga del archivo mediante el navegador del cliente.

 using (var exportData = new MemoryStream())
                  {
                      Response.Clear();
                      workbook.Write(exportData);
                      if (extension == "xlsx") //xlsx file format
                      {
                          Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                          Response.AddHeader("Content-Disposition",
                              string.Format("attachment;filename={0}", @"D:\prueball.xlsx"));
                          Response.BinaryWrite(exportData.ToArray());
                      }
                      else if (extension == "xls") //xls file format
                      {
                          Response.ContentType = "application/vnd.ms-excel";
                          Response.AddHeader("Content-Disposition",
                              string.Format("attachment;filename={0}", "tpms_dict.xls"));
                          Response.BinaryWrite(exportData.GetBuffer());
                      }
                      Response.End();
                  }

Esta es una forma rápida y sencilla de crear reportes en excel que no tengan que procesar una cantidad muy grande de datos; en el próximo articulo se mostrara como realizar el export con la librería interop


Comentarios

Entradas populares de este blog

Tablas y gráficas estadísticas dinámicas con JavaScript, highcharts, HTML y JSON

Después de tener mucho tiempo sin entradas, quiero retomar  el blog  con un poco más de desarrollo códigos ejemplos y más cosas interesantes que he podido realizar en mi día a día. En esta ocasión quiero realizar un ejemplo para el cual pueda  graficar tablas, gráficas estadísticas  utilizando la librería de highcharts ( https://www.highcharts.com/ ), esta librería tiene muchas aplicaciones se puede  usar en diferentes campos y es realmente interesante para realizar todo tipo de tratamiento de data. Este ejemplo se va a trabajar sobre un proyecto realizado en visual studio 2015, pero se debe tener en cuenta que se puede aplicar a cualquier tipo de proyecto en el cual se use javascript y objetos JSON. La idea con este código es poder generar la cantidad de objetos JSON que sean necesarios desde  el code behind usado y este sea procesado para que se genere a nivel del cliente todas las gráficas requeridas. Ejemplo: 1- Se debe crear e...

CREAR ARCHIVOS TXT EN VISUAL BASIC 2010

Buenas hoy veremos un ejemplo para crear un archivo .txt en visual basic .NET  utilizando la herramienta visual studio 2010. el manual de referencia lo podemos encontrar en el libro  VISUAL BASIC .NET lenguaje y aplicaciones 3ra edicion  Fco. Javier Ceballos el tipo de acceso mas simple a un fichero de datos es el secuencial, un fichero abierto  para acceso secuencial es un fichero que puede almacenar registros de cualquier longitud. Este tipo de acceso generalmente se utiliza con ficheros de texto en los que se escribe toda la información desde el principio hasta el final y se lee de la misma forma. las acciones mas comunes que se manejan a la hora de trabajar con archivos son: CreateNew: crea un nuevo fichero. Si el fichero existe se lanzara una excepción del tipo IOException Create: Crear un nuevo fichero. Si el fichero existe sera sobrescrito  Open: abrir el fichero existente OpenOrCreate: abrir un fichero si e...