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 originalImports Excel = Microsoft.Office.Interop.Excel
Imports System.Data
Imports System.Data.SqlClient
Imports System.Windows.Forms
Imports System.IO
Imports System.Data.OleDb
Public Class Form1
Inherits System.Windows.Forms.Form
Private MiConexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties = 'Excel 8.0'; Data Source=C:\prueba.xls;")
Private MiAdaptador As New OleDbDataAdapter("SELECT * FROM [Hoja1$]", MiConexion)
Private MiDataSet As New DataSet()
Private MiEnlazador As New BindingSource
Private Sub Update_Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Update_Btn.Click
Dim commandbuilder As New OleDb.OleDbCommandBuilder(Me.MiAdaptador)
MiConexion.Open()
MiAdaptador.Fill(MiDataSet)
MiEnlazador.DataSource = MiDataSet.Tables(0)
Me.dgg.DataSource = MiEnlazador
End Sub
Private Sub agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles agregar_Btn.Click
Try
Dim nombre As DataRow
nombre = MiDataSet.Tables(0).NewRow()
nombre("Nombre") = TB_nombre.Text
nombre("Teléfono") = TB_telefono.Text
nombre("Motivo") = TB_motivo.Text
nombre("Otros") = TB_otros.Text
MiDataSet.Tables(0).Rows.Add(nombre)
Me.MiAdaptador.Update(CType(Me.MiEnlazador.DataSource, DataTable))
Catch
End Try
End Sub
Private Sub Export_Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Export_Btn.Click
'Creamos las variables
Dim exLibro As Excel.Workbook
Dim exHoja As Excel.Worksheet
Dim exApp As New Excel.Application 'Se debe agregar la referencia en el proyecto para usar esta función
' Variables para # de columnas y # de renglones
Dim iCol As Integer
Dim iRow As Integer
Try
'Añadimos el Libro al programa, y la hoja al libro
exLibro = exApp.Workbooks("C:\prueba.xls")
exHoja = exLibro.Worksheets("Hoja1")
iCol = dgg.Columns.Count 'MiDato2
iRow = dgg.Rows.Count 'MiDato1
If iCol = 0 Then
MsgBox("No hay información por exportar a Excel", MsgBoxStyle.Information, "mi programa")
Else
'Aqui recorremos todas las filas
For i As Integer = 1 To iCol
If dgg.Columns(i - 1).Visible = True Then
exHoja.Cells.Item(1, i) = dgg.Columns(i - 1).Name.ToString
exHoja.Cells.Item(1, i).HorizontalAlignment = 3
End If
Next
'Por cada fila pone todas las columnas y vamos escribiendo.
For Fila As Integer = 0 To iRow - 1
For Col As Integer = 0 To iCol - 1
If dgg.Columns(Col).Visible = True Then
exHoja.Cells.Item(1, Col + 1) = dgg.Columns(Col).HeaderText 'Estas son las columnas del encabezado
exHoja.Cells.Item(Fila + 2, Col + 1) = dgg.Rows(Fila).Cells(Col).Value
End If
Next
Next
exLibro.SaveAs("C:\prueba.xls")
exApp.Application.Visible = True
End If
'Se eliminan las variables de objeto excel
exApp = Nothing
exHoja = Nothing
exLibro = Nothing
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Error al exportar a Excel")
Return
End Try
Return
End Sub
End Class