Conocimientos Previos:
- Conexión a Base de Datos SQL Server desde ASP.NET C# con Web.config
- Como crear un Procedure con SELECT
Secciones importantes de código
**********Se requiere de la dll NPOI descargar del Nuget Package Manager*****************
Default.aspx
<asp:Button ID="btnGeneraExcel" Text="Descargar Excel" runat="server" OnClick="btnGeneraExcel_Click" />
Default.cs
Librerias importantes:
using System.IO;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
Métodos:
Método que genera nuestro Excel
protected void btnGeneraExcel_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt = dtAlumno();
Stream s = DataTableToExcel(dt);
if (s != null)
{
MemoryStream ms = s as MemoryStream;
Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode("alumnos202014") + ".xlsx"));
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
Response.BinaryWrite(ms.ToArray());
Response.Flush();
ms.Close();
ms.Dispose();
}
}
Método que convierte la información del DataTable en Stream
public Stream DataTableToExcel(DataTable dt)
{
XSSFWorkbook workbook = new XSSFWorkbook();
MemoryStream ms = new MemoryStream();
ISheet sheet = workbook.CreateSheet("Alumno20");
XSSFRow headerRow = headerRow = (XSSFRow)sheet.CreateRow(0);
try
{
foreach (DataColumn column in dt.Columns)
headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
int rowIndex = 1;
foreach (DataRow row in dt.Rows)
{
XSSFRow dataRow = (XSSFRow)sheet.CreateRow(rowIndex);
foreach (DataColumn column in dt.Columns)
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
++rowIndex;
}
for (int i = 0; i <= dt.Columns.Count; ++i)
sheet.AutoSizeColumn(i);
workbook.Write(ms);
ms.Flush();
}
catch (Exception ex)
{
return null;
}
finally
{
ms.Close();
sheet = null;
headerRow = null;
workbook = null;
}
return ms;
}
Método que llena nuestro DataTable con información desde SQL Server
public DataTable dtAlumno()
{
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connDB"].ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SPSalumnos";
cmd.Connection = conn;
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
da.Dispose();
}
return dt;
}
disculpa, tengo un error al querer abrir el excel, me dice que tiene un formato invalido
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarSi es con MVC en vez de protected void btnGeneraExcel_Click(object sender, EventArgs e) como lo declararia?
ResponderEliminarsolo lo colocas como public void btnGeneraExcel_Click(object sender, EventArgs e) y para que se ejecute en el botón le colocas algo así en el href href="@Url.Action("btnGeneraExcel_Click", "Nombre del controlador ")"
EliminarComo se haría para mostrar los datos en distintas pestañas?
ResponderEliminarNpoi es de uso libre?
ResponderEliminarhola, al dar click en el botón descargar excel manda el siguiente error "no se pudo Guardar C:'la dirección de archivos temporales de mi equipo',porque fue imposible de leer el archivo"
ResponderEliminar"Inténtelo mas tarde o ponte en contacto con el administrador"
espero me ayudes para saber que estoy haciendo mal.