Crear una hoja excell

17/01/2006 - 19:54 por LuisMiguel | Informe spam
Buenas.
Dispongo de un Dataset, y quiero crear una hoja Excell y traspasar el
contenido del Dataset a esta hoja Excell, he buscado por el google algunos
ejemplos y ninguno he podido hacerlos funcionar, si intento hacerlo mediante
una conexion OLEDB.4.0, me sa un error de ISAM no encontrado.

Me indica alguien una pagina con un ejemplo

Gracias
LuisMiguel

Preguntas similare

Leer las respuestas

#1 Amaia Ruiz
18/01/2006 - 00:52 | Informe spam
Hola Luis Miguel:

Mira en esta dirección:
http://www.dotnetcr.com/index.aspx?...os-a-Excel

yo he pegado ese código en mi proyecto porue quiero hacer lo que tú. luego,
te tienes qeu descargar esto:
http://www.microsoft.com/downloads/...layLang=en

son unas librerías (tienes que ejecutar lo que te bajes), y luego
referenciar esas librerías. Lo malo es que yo todavía no lo he hecho porque
no sé que librerías pueden ser. Ahora iba a poner una pregutna en el foro al
respecto. Espero que al menos asi avances algo. Un saludo

AMAIA

"LuisMiguel" escribió:


Buenas.
Dispongo de un Dataset, y quiero crear una hoja Excell y traspasar el
contenido del Dataset a esta hoja Excell, he buscado por el google algunos
ejemplos y ninguno he podido hacerlos funcionar, si intento hacerlo mediante
una conexion OLEDB.4.0, me sa un error de ISAM no encontrado.

Me indica alguien una pagina con un ejemplo

Gracias
LuisMiguel




Respuesta Responder a este mensaje
#2 LuisMiguel
18/01/2006 - 11:15 | Informe spam
Hola Amaia
Gracias por la direccion.
Con tu ayuda, parece que funciona, lo único que hice fue generar una DLL con
el ejemplo de la direccion que me dijiste, y referenciandola en mi proyecto,
la utilizo

private Sub Exportar(qDS as Dataset)
dim cExportar as new ExportarDatosExcell.Funciones
cExportar.DataTableToExcell(qDS.Tables(0))
end Sub

Espero que te sirva de algo
y gracias de Nuevo
LuisMiguel
"Amaia Ruiz" escribió en el mensaje
news:
Hola Luis Miguel:

Mira en esta dirección:
http://www.dotnetcr.com/index.aspx?...os-a-Excel

yo he pegado ese código en mi proyecto porue quiero hacer lo que tú.
luego,
te tienes qeu descargar esto:
http://www.microsoft.com/downloads/...layLang=en

son unas librerías (tienes que ejecutar lo que te bajes), y luego
referenciar esas librerías. Lo malo es que yo todavía no lo he hecho
porque
no sé que librerías pueden ser. Ahora iba a poner una pregutna en el foro
al
respecto. Espero que al menos asi avances algo. Un saludo

AMAIA

"LuisMiguel" escribió:


Buenas.
Dispongo de un Dataset, y quiero crear una hoja Excell y traspasar el
contenido del Dataset a esta hoja Excell, he buscado por el google
algunos
ejemplos y ninguno he podido hacerlos funcionar, si intento hacerlo
mediante
una conexion OLEDB.4.0, me sa un error de ISAM no encontrado.

Me indica alguien una pagina con un ejemplo

Gracias
LuisMiguel







Respuesta Responder a este mensaje
#3 SoftJaén
18/01/2006 - 15:52 | Informe spam
"LuisMiguel" escribió:

Dispongo de un Dataset, y quiero crear una hoja Excel y traspasar el
contenido del Dataset a esta hoja Excel, he buscado por el google algunos
ejemplos y ninguno he podido hacerlos funcionar, si intento hacerlo
mediante una conexion OLEDB.4.0, me sa un error de ISAM no encontrado.




Hola, Luis Miguel:

El error del ISAM puede deberse a que no lo tengas instalado en tu equipo, o
bien, estés utilizando una sintaxis incorrecta para conectarte con el libro
de Excel.

Suponiendo que tengas instalado en tu equipo el ISAM de Excel, con el
siguiente ejemplo crearás un nuevo libro de trabajo (Libro1.xls), un rango
de celdas con nombre y una hoja de cálculo, ambas de igual nombre (Hoja1),
la cual tendrá dos columnas (Campo1 y Campo2):

Dim cnn As New OleDbConnection

cnn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Libro1.xls;" & _
"Extended Properties='Excel 8.0;HDR=Yes'"

Try
' Abrimos la conexión
cnn.Open()

' Configuramos el comando
Dim cmd As New OleDbCommand
With cmd
.Connection = cnn
.CommandType = CommandType.Text
.CommandText = "CREATE TABLE Hoja1 (" & _
"Campo1 TEXT, Campo2 TEXT)"

.ExecuteNonQuery()
End With

MessageBox.Show("Se ha creado con éxito el libro de trabajo.")

Catch ex As OleDbException
MessageBox.Show(ex.Message)

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
' Cerramos la conexión
cnn.Close()
cnn = Nothing

End Try

Ya tienes creado un nuevo libro de trabajo que podrás visualizarlo en tu
aplicación de la siguiente manera:

Imports System.Data
Imports System.Data.OleDb

Private da As New OleDbDataAdapter
Private ds As New DataSet

Private Sub Form1_Load(...) Handles MyBase.Load

Dim cnn As New OleDbConnection

' Configuramos la conexión con el libro de Excel
cnn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Libro1.xls;" & _
"Extended Properties='Excel 8.0;HDR=Yes'"

Try
' Abrimos la conexión
cnn.Open()

' Creamos los respectivos objetos Command
Dim selectCmd As New OleDbCommand
Dim insertCmd As New OleDbCommand
Dim updateCmd As New OleDbCommand

' Configuramos el objeto DataAdapter
With da
.InsertCommand = insertCmd
.SelectCommand = selectCmd
.TableMappings.AddRange(New Common.DataTableMapping() _
{New Common.DataTableMapping("Table", "Hoja1$", _
New Common.DataColumnMapping() _
{New Common.DataColumnMapping("Campo1", "Campo1"), _
New Common.DataColumnMapping("Campo2", "Campo2")})})
End With

With selectCmd
.CommandText = "SELECT Campo1, Campo2 FROM [Hoja1$]"
.Connection = cnn
End With

With insertCmd
.CommandText = "INSERT INTO [Hoja1$] (Campo1, Campo2) VALUES (?, ?)"
.Connection = cnn
.Parameters.Add(New OleDbParameter("Campo1", _
OleDbType.VarWChar, 255, "Campo1"))
.Parameters.Add(New OleDbParameter("Campo2", _
OleDbType.VarWChar, 255, "Campo2"))
End With

' El comando Update es el más puñetero de configurar, de hecho
' he utilizado el asistente para configurar el adaptador de datos
' y he pegado el código
'
With updateCmd
.CommandText = "UPDATE [Hoja1$] " & _
"SET Campo1 = ?, Campo2 = ? " & _
"WHERE (Campo1 = ?) AND (Campo2 = ? OR ? " & _
"IS NULL AND Campo2 IS NULL)"

.Connection = cnn

.Parameters.Add(New OleDbParameter("Campo1", _
OleDbType.VarWChar, 255, "Campo1"))
.Parameters.Add(New OleDbParameter("Campo2", _
OleDbType.VarWChar, 255, "Campo2"))

.Parameters.Add(New OleDbParameter("Original_Campo1", _
OleDbType.VarWChar, 255, ParameterDirection.Input, _
False, CType(0, Byte), CType(0, Byte), "Campo1", _
DataRowVersion.Original, Nothing))

.Parameters.Add(New OleDbParameter("Original_Campo2", _
OleDbType.VarWChar, 255, ParameterDirection.Input, _
False, CType(0, Byte), CType(0, Byte), "Campo2", _
DataRowVersion.Original, Nothing))

.Parameters.Add(New OleDbParameter("Original_Campo21", _
OleDbType.VarWChar, 255, ParameterDirection.Input, _
False, CType(0, Byte), CType(0, Byte), "Campo2", _
DataRowVersion.Original, Nothing))
End With

' Rellenamos el objeto DataSet
da.Fill(ds, "TablaExcel")

' Mostramos los datos en un control DataGrid
With DataGrid1
.DataSource = ds
.DataMember = "TablaExcel"
End With

Catch ex As OleDbException
MessageBox.Show(ex.Message)

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
cnn.Close()
cnn = Nothing

End Try

End Sub

Ahora ya tienes creado un conjunto de datos (DataSet) y un objeto DataTable
llamado «TablaExcel». Solo falta que rellenes datos en el control DataGrid.
Cuando lo creas conveniente, enviarías los datos a la hoja de cálculo de la
siguiente manera:

Private Sub Button1_Click( ...) Handles Button1.Click

Try
' Enviamos los datos a la hoja de cálculo
da.Update(ds, "TablaExcel")
MessageBox.Show("Se han insertado los registros.")

Catch ex As OleDbException
MessageBox.Show(ex.Message)

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End Sub

Te advierto que esta forma de utilizar el ISAM de Excel solo sirve para
seleccionar, modificar e insertar registros; no puedes eliminar registros
porque es una limitación que tiene el propio ISAM de Excel.

Para más información sobre el ISAM de Excel, puedes consultas el artículo
que te indico más abajo, que aunque en principio lo escribí para ser
utilizado con Visual Basic clásico, se puede adaptar en algunos aspectos
para ser ejecutado mediante código de Visual Basic .NET:

Trabajar con ADO, DAO y Excel
http://mvp-access.com/softjaen/arti..._excel.htm


Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#4 LuisMiguel
19/01/2006 - 10:08 | Informe spam
Gracias por tu atencion


LuisMiguel
"SoftJaén" escribió en el mensaje
news:

"LuisMiguel" escribió:

Dispongo de un Dataset, y quiero crear una hoja Excel y traspasar el
contenido del Dataset a esta hoja Excel, he buscado por el google algunos
ejemplos y ninguno he podido hacerlos funcionar, si intento hacerlo
mediante una conexion OLEDB.4.0, me sa un error de ISAM no encontrado.




Hola, Luis Miguel:

El error del ISAM puede deberse a que no lo tengas instalado en tu equipo,
o
bien, estés utilizando una sintaxis incorrecta para conectarte con el
libro
de Excel.

Suponiendo que tengas instalado en tu equipo el ISAM de Excel, con el
siguiente ejemplo crearás un nuevo libro de trabajo (Libro1.xls), un rango
de celdas con nombre y una hoja de cálculo, ambas de igual nombre (Hoja1),
la cual tendrá dos columnas (Campo1 y Campo2):

Dim cnn As New OleDbConnection

cnn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Libro1.xls;" & _
"Extended Properties='Excel 8.0;HDR=Yes'"

Try
' Abrimos la conexión
cnn.Open()

' Configuramos el comando
Dim cmd As New OleDbCommand
With cmd
.Connection = cnn
.CommandType = CommandType.Text
.CommandText = "CREATE TABLE Hoja1 (" & _
"Campo1 TEXT, Campo2 TEXT)"

.ExecuteNonQuery()
End With

MessageBox.Show("Se ha creado con éxito el libro de trabajo.")

Catch ex As OleDbException
MessageBox.Show(ex.Message)

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
' Cerramos la conexión
cnn.Close()
cnn = Nothing

End Try

Ya tienes creado un nuevo libro de trabajo que podrás visualizarlo en tu
aplicación de la siguiente manera:

Imports System.Data
Imports System.Data.OleDb

Private da As New OleDbDataAdapter
Private ds As New DataSet

Private Sub Form1_Load(...) Handles MyBase.Load

Dim cnn As New OleDbConnection

' Configuramos la conexión con el libro de Excel
cnn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Libro1.xls;" & _
"Extended Properties='Excel 8.0;HDR=Yes'"

Try
' Abrimos la conexión
cnn.Open()

' Creamos los respectivos objetos Command
Dim selectCmd As New OleDbCommand
Dim insertCmd As New OleDbCommand
Dim updateCmd As New OleDbCommand

' Configuramos el objeto DataAdapter
With da
.InsertCommand = insertCmd
.SelectCommand = selectCmd
.TableMappings.AddRange(New Common.DataTableMapping() _
{New Common.DataTableMapping("Table", "Hoja1$", _
New Common.DataColumnMapping() _
{New Common.DataColumnMapping("Campo1", "Campo1"), _
New Common.DataColumnMapping("Campo2", "Campo2")})})
End With

With selectCmd
.CommandText = "SELECT Campo1, Campo2 FROM [Hoja1$]"
.Connection = cnn
End With

With insertCmd
.CommandText = "INSERT INTO [Hoja1$] (Campo1, Campo2) VALUES (?,
?)"
.Connection = cnn
.Parameters.Add(New OleDbParameter("Campo1", _
OleDbType.VarWChar, 255, "Campo1"))
.Parameters.Add(New OleDbParameter("Campo2", _
OleDbType.VarWChar, 255, "Campo2"))
End With

' El comando Update es el más puñetero de configurar, de hecho
' he utilizado el asistente para configurar el adaptador de datos
' y he pegado el código
'
With updateCmd
.CommandText = "UPDATE [Hoja1$] " & _
"SET Campo1 = ?, Campo2 = ? " & _
"WHERE (Campo1 = ?) AND (Campo2 = ? OR ? " & _
"IS NULL AND Campo2 IS NULL)"

.Connection = cnn

.Parameters.Add(New OleDbParameter("Campo1", _
OleDbType.VarWChar, 255, "Campo1"))
.Parameters.Add(New OleDbParameter("Campo2", _
OleDbType.VarWChar, 255, "Campo2"))

.Parameters.Add(New OleDbParameter("Original_Campo1", _
OleDbType.VarWChar, 255, ParameterDirection.Input, _
False, CType(0, Byte), CType(0, Byte), "Campo1", _
DataRowVersion.Original, Nothing))

.Parameters.Add(New OleDbParameter("Original_Campo2", _
OleDbType.VarWChar, 255, ParameterDirection.Input, _
False, CType(0, Byte), CType(0, Byte), "Campo2", _
DataRowVersion.Original, Nothing))

.Parameters.Add(New OleDbParameter("Original_Campo21", _
OleDbType.VarWChar, 255, ParameterDirection.Input, _
False, CType(0, Byte), CType(0, Byte), "Campo2", _
DataRowVersion.Original, Nothing))
End With

' Rellenamos el objeto DataSet
da.Fill(ds, "TablaExcel")

' Mostramos los datos en un control DataGrid
With DataGrid1
.DataSource = ds
.DataMember = "TablaExcel"
End With

Catch ex As OleDbException
MessageBox.Show(ex.Message)

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
cnn.Close()
cnn = Nothing

End Try

End Sub

Ahora ya tienes creado un conjunto de datos (DataSet) y un objeto
DataTable
llamado «TablaExcel». Solo falta que rellenes datos en el control
DataGrid.
Cuando lo creas conveniente, enviarías los datos a la hoja de cálculo de
la
siguiente manera:

Private Sub Button1_Click( ...) Handles Button1.Click

Try
' Enviamos los datos a la hoja de cálculo
da.Update(ds, "TablaExcel")
MessageBox.Show("Se han insertado los registros.")

Catch ex As OleDbException
MessageBox.Show(ex.Message)

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End Sub

Te advierto que esta forma de utilizar el ISAM de Excel solo sirve para
seleccionar, modificar e insertar registros; no puedes eliminar registros
porque es una limitación que tiene el propio ISAM de Excel.

Para más información sobre el ISAM de Excel, puedes consultas el artículo
que te indico más abajo, que aunque en principio lo escribí para ser
utilizado con Visual Basic clásico, se puede adaptar en algunos aspectos
para ser ejecutado mediante código de Visual Basic .NET:

Trabajar con ADO, DAO y Excel
http://mvp-access.com/softjaen/arti..._excel.htm


Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o
sugerido en el presente mensaje.





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida