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 el proyecto con el cual se va