none
problema al escribir datos sobre un archivo de excel (2010) existente con vb2008 RRS feed

  • 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 Form1

     Private 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


    sábado, 4 de julio de 2015 0:53

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)

    sábado, 4 de julio de 2015 21:05