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
Publicar un comentario