Samuel Vasquez A.

Desde Santiago de Chile
  • rss
  • Inicio
  • El Autor
  • Curriculum Vitae
  • Contacto

Leer archivos Excel en un servidor de 64 bits, parte I

admin | 6 Agosto 2008

Problemas planteados:

  1. A traves de una aplicación web el usuario adjunta un archivo Excel. Leer el contenido de dicho archivo y grabarlo en un conjunto de tablas dentro de una base de datos.
  2. El servidor web que aloja la aplica usa el sistema Windows Server 2003 Release 2, con 64 bits. Esto impide que funcione correctamente el proveedor OLE DB, pues no existe una versión de dicho proveedor en 64 bits.

Desarrollo:
Para leer datos desde el usuario, una solución mas específica podría haber sido el uso de XML, pero en este caso los usuarios no son muy técnicos y ya tienen la información en archivos Excel.

En esta primera parte, vamos a ver como leer el archivo Excel, en ASP.NET

Paso 1: Función GetExcelDataSet

Primero, creamos una función GetExcelDataSet que tome la ruta de un archivo Excel y el nombre de area de datos a leer y devuelva un DataSet.

Para leer el archivo, usamos el proveedor ACE OLEDB 12.0, que puede leer hasta los Excel en sus versiones 2007 o inferior. (Mas información: http://www.connectionstrings.com/?carrier=excel2007)

Una vez establecida la cadena de conexión, intentamos abrir la conexión con el archivo Excel.

Luego de abrir la conexión al archivo, utilizamos una sentencia SELECT para leer los datos de un area de datos del archivo que se defina con un nombre de area específico.

Por último, la información leída del archivo es cargada dentro de un DataTable con el mismo nombre que el área y devuelta en un DataSet.

public DataSet GetExcelDataSet(string FileName, string NombreArea)
{
OleDbConnection oConn = new OleDbConnection();
DataSet oDs = new DataSet();
OleDbCommand oCmd = new OleDbCommand();
OleDbDataAdapter oDa = new OleDbDataAdapter();
// Recuperamos la cadena de conexion
string strConexion = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” + FileName + “;Extended Properties=’Excel 12.0 Xml;HDR=NO;MaxScanRows=1′”;
oConn.ConnectionString = strConexion;
// Abrimos la conexion con el archivo Excel
try
{
oConn.Open();
}
catch (Exception ex)
{
throw new Exception(”No se pudo establecer la conexión con el archivo Excel”, ex);
}
oCmd.Connection = oConn;
// Leemos la información de un area del Excel
DataTable oDt = oDs.Tables.Add(NombreArea);
oCmd.CommandText = “SELECT * FROM ” + NombreArea;
oDa.SelectCommand = oCmd;
try
{
oDa.Fill(oDt);
}
catch (Exception ex)
{
throw new Exception(”No se pudo rescatar la información del area ” + NombreArea, ex);
}
return oDs;
}

Paso 2: Formulario LeerExcel.aspx

Ahora creamos un formulario web en .NET, que contenga los siguientes controles:

  • FileUpload, subir el archivo Excel,
  • TextBox, escribir el nombre de area de datos
  • Botón, generar la acción de leer el archivo
  • GridView, mostrar los datos del Excel

El código de esta página será similar al siguiente:

<form id=”form1″ runat=”server”>
<div>
<p>Archivo <asp:FileUpload ID=”fuExcel” runat=”server” /></p>
<p>Nombre de area <asp:TextBox ID=”txtNombreArea” runat=”server”></asp:TextBox></p>
<p><asp:Button ID=”btnLeer” runat=”server”  Text=”Leer” OnClick=”btnLeer_Click”  /></p>
<p>Valores Leídos:</p>
<asp:GridView ID=”GridView1″ runat=”server”>
</asp:GridView>
</div>
</form>

Por último, en el codebehind de la página, tenemos el evento btnLeer_Click, que realiza las siguientes acciones:

  • Grabar el archivo Excel en un directorio temporal del servidor,
  • Rescatar la información del archivo con la función GetExcelDataSet, y
  • Mostrar dichos datos en la GridView

protected void btnLeer_Click(object sender, EventArgs e)
{
if (fuExcel.HasFile)
{
string filename = @”D:\TEMP\” + fuExcel.FileName;
FileStream fs = new FileStream(filename, FileMode.Create);
fs.Write(fuExcel.FileBytes, 0, Convert.ToInt32(fuExcel.FileBytes.Length));
fs.Close();
DataSet dsDatos = GetExcelDataSet(filename, txtNombreArea.Text);
GridView1.DataSource = dsDatos;
GridView1.DataBind();
}
}

Hasta aquí, si estamos probando en un PC de desarrollo no hay ningún problema. Hasta que lo pasamos al servidor de producción (64 bits) y la función GetExcelDataSet no funciona… Motivo: el proveedor OLE DB no está registrado en el servidor…. Solución: Correr la función GetExcelDataSet en un entorno de 32 bits.

La solucion en detalle, en una próxima entrega.

Categorias
.NET
Tags
.NET, ASP.NET, Excel, OLE DB
Comentarios RSS
Comentarios RSS

« Paradigma del Agua Fria Viaje al baul de los recuerdos »

2 respuestas

Tengo el mismo problema con un accés, porfavor!!!! cual es

jaime | 3 Septiembre 2008

Tengo el mismo problema con un accés, porfavor!!!! cual es la solución!?!?!

Gracias

Jaime: Acabo de publicar las alternativas de solución que me sirvieron

admin | 4 Septiembre 2008

Jaime:
Acabo de publicar las alternativas de solución que me sirvieron con Excel.
Espero que te sirvan tambien con Access. Cuentame como te va.
De todas formas, si en algo te puedo ayuda, cuenta conmigo.
Saludos, Samuel.

Deje un comentario

usted puede usar estos tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Articulos recientes

  • Definiciones
  • Locos
  • Estrellas
  • Encuentro
  • Leer archivos Excel en un servidor de 64 bits, parte II

Navigation

  • General Ver todas las entradas guardadas bajo General
    • Personal Ver todas las entradas guardadas bajo Personal
  • Profesional Ver todas las entradas guardadas bajo Profesional
    • .NET Ver todas las entradas guardadas bajo .NET
    • Proyectos Ver todas las entradas guardadas bajo Proyectos

Archivos mensuales

  • Abril de 2009 (1)
  • Diciembre de 2008 (1)
  • Noviembre de 2008 (1)
  • Octubre de 2008 (1)
  • Septiembre de 2008 (1)
  • Agosto de 2008 (3)
  • Julio de 2008 (4)

Portafolio

  • Departamento de Cooperativas
  • Preuniversitario Magallanes
rss Comentarios RSS valid xhtml 1.1 design by jide powered by Wordpress get firefox