Excel en ASP .NET con C# y VB

Mostrar una hoja de cálculo de Excel en una página web dinámica aspx usando un rango de celdas como origen de datos de un DataGrid, en C# y en VB

ADO .NET proporciona métodos para conectar con diferentes almacenes de datos. En este ejercicio se utilizan clases pertenecientes a los espacios de nombres System.Data y System.Data.OleDb para conectar con una hoja de cálculo de Microsoft Excel. Un grupo de celdas de la hoja de cálculo, englobadas en un rango con nombre, hace la función de tabla del DataSet que es mostrada en el DataGrid.

Hoja de cálculo de Excel

  • creamos la hoja de cálculo en Microsoft Excel
  • hay que asignar un nombre a un grupo o rango de celdas, primero seleccionamos las celdas (filas y columnas) con los datos que deseamos transferir a la página aspx
  • con las celdas seleccionadas, para crear el rango de celdas en Excel 2003 y versiones anteriores tenemos que ir al menú Insertar / Nombre / Definir
  • en Excel 2007 tenemos que ir al menú Fórmulas / Asignar nombre a un rango
  • en Excel 2013 tenemos que ir al menú Fórmulas / Asignar nombre
  • damos un nombre al rango seleccionado y pulsamos Aceptar (este nombre es el que vamos a emplear como nombre de tabla en la sentencia SQL de selección que rellenará un DataSet desde un OleDbDataAdapter)
  • guardamos la hoja de Excel (en este ejercicio es el archivo que se llama exceldata.xls).

ASP .NET

Creamos el proyecto en Visual Studio. La página dinámica aspx contiene un objeto DataGrid (de nombre rejilla en este ejercicio). En la página de código C# conectamos con la hoja de Excel usando una cadena de conexión de tipo OleDb. Se usa el proveedor OLEDB de Microsoft Jet que es un motor de bases de datos utilizado por Windows desde el año 1992 compatible con los programas de Office y con .NET aunque, para tareas profesionales, es reemplazado por MSDE (Microsoft Desktop Engine) y más recientemente por SQL Server Express.

En este ejemplo el archivo de Excel, llamado exceldata.xls, contiene una serie de cifras que constituyen la altimetría de un puerto de montaña (Sierra Nevada) y el nombre del rango de celdas es sierra.El DataGrid se puede formatear en la página aspx cambiando su aspecto (colores, fuentes, etc.) y, si contiene un número elevado de filas, se puede paginar (en este ejemplo he configurado 4 páginas). El libro de Excel puede contener más de una hoja y es posible enlazar varios DataGrid con varios nombres de rangos diferentes.

private DataSet datos1;
private DataSet datos2;
private OleDbDataAdapter adaptador1;
private OleDbDataAdapter adaptador2;

private void Page_Load(System.Object sender, System.EventArgs e)
{

try
{
	// cadena de conexión específica para el proveedor
	string cadenaCon = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
	"Data Source=" + Server.MapPath("exceldata.xls") + ";" + 
	"Extended Properties=Excel 8.0;";
	
	// OleDbConnection a la que se le pasa la cadena de conexión
	OleDbConnection con = new OleDbConnection(cadenaCon);
	// abrir la conexión con el origen de datos
	con.Open();
	
	// OleDbDataAdapter creado con la sentencia SQL y el nombre del objeto OleDbConnection
	adaptador1 = new OleDbDataAdapter("SELECT * FROM sierra", con);
	// DataSet para ser rellenado desde el OleDbDataAdapter
	datos1 = new DataSet();
	adaptador1.Fill(datos1, "XLData");
	// DataGrid con origen en el DataSet
	rejilla1.DataSource = datos1.Tables[0];
	rejilla1.DataBind();
	
	// OleDbDataAdapter creado con la sentencia SQL y el nombre del objeto OleDbConnection
	adaptador2 = new OleDbDataAdapter("SELECT * FROM sierratotal", con);
	// DataSet para ser rellenado desde el OleDbDataAdapter
	datos2 = new DataSet();
	adaptador2.Fill(datos2, "XLData");
	// DataGrid con origen en el DataSet
	rejilla2.DataSource = datos2.Tables[0];
	rejilla2.DataBind();
	
	//generar texto en la página, antes de las tablas con los datos
	Response.Write("<br />");
	Response.Write("<DIV ALIGN=\"center\"><FONT SIZE=\"4\"><B>Leer una hoja de Excel desde ASP .NET" + 
	"</B></FONT><br /><br /><FONT SIZE=\"2\"><STRONG>Altimetría de Sierra Nevada</STRONG></FONT><br />");
	
	// cerrar la conexión con el origen de datos
	con.Close();
	
}
catch (Exception pollo)
{
	Response.Write("<br /><br /><br /><TABLE ALIGN=\"CENTER\" WIDTH=\"500\"><TR><TD>" + 
	"<FONT FACE=\"VERDANA\" SIZE=\"3\" COLOR=\"RED\"><B>ERROR</B>: " + 
	pollo.Message + "</FONT></TD></TR></TABLE>");
}

}

//paginación del DataGrid
public void Rejilla_IndexChanged(object obj, DataGridPageChangedEventArgs e)
{
	rejilla1.CurrentPageIndex = e.NewPageIndex;
	rejilla1.DataBind();
}

Puedes descargar un archivo ZIP con las aplicaciones C# y VB.

Deja un comentario

Tu dirección de correo electrónico no será publicada.