Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/08/2011, 08:12
Avatar de moradazo
moradazo
 
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 16 años, 6 meses
Puntos: 2
importar y exportar a Excel : Visual Basic 2005

Hola amigos a ver quien me puede ayudar.

Tengo un DataGridView1, ahi cargo lo que tengo en excel con un path fijo (Ej: C:\test.xls)

Tengo un botón para agregar filas al datagridview, todo bien hasta ahí

El problema es en el momento de exportar, me aseguro de cerrar la lectura del excel y cuando le doy me da muchos errores distintos, por ejemplo:

El índice no es válido. (Excepción de HRESULT: 0x8002000B (DISP_E_BADINDEX))
El formato no es válido, etc.

Lo que quiero realmente es salvar los datos que se agregan nuevos al mismo archivo de excel.

La referencia agregué la 11, la válida para Office 2003.

dgg es el DataGridView

Código vb:
Ver original
  1. Imports Excel = Microsoft.Office.Interop.Excel
  2. Imports System.Data
  3. Imports System.Data.SqlClient
  4. Imports System.Windows.Forms
  5. Imports System.IO
  6. Imports System.Data.OleDb
  7. Public Class Form1
  8.     Inherits System.Windows.Forms.Form
  9.     Private MiConexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties = 'Excel 8.0'; Data Source=C:\prueba.xls;")
  10.     Private MiAdaptador As New OleDbDataAdapter("SELECT * FROM [Hoja1$]", MiConexion)
  11.     Private MiDataSet As New DataSet()
  12.     Private MiEnlazador As New BindingSource
  13.  
  14.     Private Sub Update_Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Update_Btn.Click
  15.         Dim commandbuilder As New OleDb.OleDbCommandBuilder(Me.MiAdaptador)
  16.         MiConexion.Open()
  17.         MiAdaptador.Fill(MiDataSet)
  18.         MiEnlazador.DataSource = MiDataSet.Tables(0)
  19.         Me.dgg.DataSource = MiEnlazador
  20.     End Sub
  21.     Private Sub agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles agregar_Btn.Click
  22.         Try
  23.             Dim nombre As DataRow
  24.             nombre = MiDataSet.Tables(0).NewRow()
  25.             nombre("Nombre") = TB_nombre.Text
  26.             nombre("Teléfono") = TB_telefono.Text
  27.             nombre("Motivo") = TB_motivo.Text
  28.             nombre("Otros") = TB_otros.Text
  29.             MiDataSet.Tables(0).Rows.Add(nombre)
  30.             Me.MiAdaptador.Update(CType(Me.MiEnlazador.DataSource, DataTable))
  31.         Catch
  32.         End Try
  33.     End Sub
  34.  
  35.     Private Sub Export_Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Export_Btn.Click
  36.         'Creamos las variables
  37.        Dim exLibro As Excel.Workbook
  38.         Dim exHoja As Excel.Worksheet
  39.         Dim exApp As New Excel.Application 'Se debe agregar la referencia en el proyecto para usar esta función
  40.        ' Variables para # de columnas y # de renglones
  41.        Dim iCol As Integer
  42.         Dim iRow As Integer
  43.         Try
  44.             'Añadimos el Libro al programa, y la hoja al libro
  45.            exLibro = exApp.Workbooks("C:\prueba.xls")
  46.             exHoja = exLibro.Worksheets("Hoja1")
  47.             iCol = dgg.Columns.Count 'MiDato2
  48.            iRow = dgg.Rows.Count 'MiDato1
  49.            If iCol = 0 Then
  50.                 MsgBox("No hay información por exportar a Excel", MsgBoxStyle.Information, "mi programa")
  51.             Else
  52.                 'Aqui recorremos todas las filas
  53.                For i As Integer = 1 To iCol
  54.                     If dgg.Columns(i - 1).Visible = True Then
  55.                         exHoja.Cells.Item(1, i) = dgg.Columns(i - 1).Name.ToString
  56.                         exHoja.Cells.Item(1, i).HorizontalAlignment = 3
  57.                     End If
  58.                 Next
  59.                 'Por cada fila pone todas las columnas y vamos escribiendo.
  60.                For Fila As Integer = 0 To iRow - 1
  61.                     For Col As Integer = 0 To iCol - 1
  62.                         If dgg.Columns(Col).Visible = True Then
  63.                             exHoja.Cells.Item(1, Col + 1) = dgg.Columns(Col).HeaderText 'Estas son las columnas del encabezado
  64.                            exHoja.Cells.Item(Fila + 2, Col + 1) = dgg.Rows(Fila).Cells(Col).Value
  65.                         End If
  66.                     Next
  67.                 Next
  68.                 exLibro.SaveAs("C:\prueba.xls")
  69.                 exApp.Application.Visible = True
  70.             End If
  71.             'Se eliminan las variables de objeto excel
  72.            exApp = Nothing
  73.             exHoja = Nothing
  74.             exLibro = Nothing
  75.         Catch ex As Exception
  76.             MsgBox(ex.Message, MsgBoxStyle.Information, "Error al exportar a Excel")
  77.             Return
  78.         End Try
  79.         Return
  80.     End Sub
  81. End Class