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
Imports 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