Usuario
problema al escribir datos sobre un archivo de excel (2010) existente con vb2008

Pregunta
-
Hola amigos
estoy realizando una aplicación que me permita leer y modificar datos en las sheet de una hoja de exel, ya puedo extraer los datos de las diferentes hojas y publicarlas en un datagrid.
Mi problema radica al tratar de escribir sobre el archivo (existente), en ocasiones el código me escribe correctamente pero cuando finaliza la aplicación me esta pidiendo que guarde de nuevo el archivo.
Adjunto mi código para ver quien me puede colaborar con este tema.
Imports System.Data.OleDb
Imports System.Data
Public Class Form1Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim stRuta As String = "C:\Users\JASO\Desktop\proyecto\TRANS ARGELIA Y CAIRO.xlsx"
Try
Dim stConexion As String = ("Provider=Microsoft.ACE.OLEDB.12.0;" & ("Data Source=" & (stRuta & ";Extended Properties=""Excel 12.0;Xml;HDR=NO;IMEX=0"";")))
Dim cnConex As New OleDbConnection(stConexion)
Dim Cmd As New OleDbCommand("Select * From [Hoja1$]")
Dim Ds As New DataSet
Dim Da As New OleDbDataAdapter
Dim Dt As New DataTable
cnConex.Open()
Cmd.Connection = cnConex
Da.SelectCommand = Cmd
Da.Fill(Ds)
Dt = Ds.Tables(0)
Me.DataGridView1.Columns.Clear()
Me.DataGridView1.DataSource = Dt
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
End Try
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim stRuta As String = "C:\Users\JASO\Desktop\proyecto\TRANS ARGELIA Y CAIRO.xlsx"
'Dim area = "Hoja2"
'Dim openFD As New OpenFileDialog()
'With openFD
'.Title = "Seleccionar archivos"
' .Filter = "Archivos Excel(*.xls;*.xlsx)|*.xls;*xlsx|Todos los archivos(*.*)|*.*"
' .Multiselect = False
'.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
'If .ShowDialog = Windows.Forms.DialogResult.OK Then
'stRuta = .FileName
' End If
'End With
'TextBox1.Text = stRuta
Try
'Dim scs As String = "provider=Microsoft.jet.OLEDB.4.0; " & "data source=" & cadena & "; Extended Properties=8.0;"
'Dim scs2010 As String = "provider=Microsoft.ACE.OLEDB.12.0; " & "data sourse=" & cadena & "; Excel 12.0;IMEX=1;HDR=NO;" 'esta cadena es para 2010 y 2012 y hasta puede abrir todas
'Dim stConexion As String = ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + stRuta + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'")
Dim stConexion As String = ("Provider=Microsoft.ACE.OLEDB.12.0;" & ("Data Source=" & (stRuta & ";Extended Properties=""Excel 12.0;Xml;HDR=NO;IMEX=0"";")))
Dim cnConex As New OleDbConnection(stConexion)
Dim Cmd As New OleDbCommand("Select * From [Hoja2$]")
Dim Ds As New DataSet
Dim Da As New OleDbDataAdapter
Dim Dt As New DataTable
cnConex.Open()
Cmd.Connection = cnConex
Da.SelectCommand = Cmd
Da.Fill(Ds)
Dt = Ds.Tables(0)
Me.DataGridView1.Columns.Clear()
Me.DataGridView1.DataSource = Dt
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
End Try
End Sub
Private Sub Button5_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim m_Excel As Microsoft.Office.Interop.Excel.Application
Dim strRutaExcel As String
strRutaExcel = "C:\Users\JASO\Desktop\proyecto\TRANS ARGELIA Y CAIRO.xlsx"
m_Excel = CreateObject("Excel.Application")
m_Excel.Workbooks.Open(strRutaExcel)
m_Excel.Visible = False 'Dejamos el libro oculto
'Mostramos el valor de la celda 1,1 del primer libre
MsgBox(m_Excel.Worksheets("Hoja1").Cells(1, 2).Value)
'Escribir en una celda
m_Excel.Worksheets("Hoja1").cells(3, 3).value = "jaso"
'Guardamos los cambios del libro activo
'm_Excel.Application.ActiveWorkbook.Save()
'Nota: Hay una instruccion como esta:
'm_Excel.Application.ActiveWorkbook.SaveAs()
'm_Excel.Workbooks("TRANS ARGELIA Y CAIRO.xlsx").Close()
m_Excel.ActiveWorkbook.Close()
m_Excel.Quit()
m_Excel = Nothing
' Aunque no se recomienda, obligamos a que se
' lleve a cabo la recolección de elementos
' no utilizados.
GC.Collect()
' Detenemos el proceso actual hasta que finalice
' el método Collect
GC.WaitForPendingFinalizers()
End Sub
Todas las respuestas
-
hola a todos
Ya pude realizar la exportación de datos al archivo de excel sin ningún problema, ahora tengo en un problema ya que luego de la importación de los datos al datagrid, ahora quiero seguir agregando filas al datadrid desde el codigo con el comando row, pero me sale un error donde em dice que no puede agregar mas filas desde el código cuando el datagrid esta vinculado a importación de datos (el datagrid recibe los datos por código desde un archivo de exel.
DataGridView1.Rows.Add(SITIO, MODO, b6 + "/" + b7 + "/" + b8, b9 + ":" + b10 + ":" + b11, b12 + b13 + b14 + b15 + b16, b17, ESTADO, b18 + "%", b19)