Excel en ASP .NET con 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 Visual Studio 2017 con 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 VB 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.

' cadena de conexión específica para el proveedor
Dim cadenaCon As String = "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
Dim con As OleDbConnection = 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()

'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" &amp; _
"</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()

Puedes descargar el proyecto completo desde aquí.