none
Guardar datos en un archivo de excel existente RRS feed

  • Pregunta

  • Buenas comunidad, tendo dudas sobre como guardar datos en un archivo de excel ya existente, el código que utilizo para ello es el siguiente...

                        Dim oExcel As Object
                        Dim oBook As Object
                        Dim oSheet As Object
                        oExcel = CreateObject("Excel.Application")
                        oExcel.Visible = True
                        oBook.Workbooks.Open(RutaMunos & "\MuNOS\Tickets" & "\TicketsUsuario" & FechaHora & ".xlsx")
                        oSheet = oExcel.Woorksheets
                       
                        For Each item As ListViewItem In ListView1.Items

                            If j > 8 Then
                                i = i + 5
                                j = 2
                            End If

                            oSheet.cells(i, j).select()
                            oSheet.Pictures.Insert(datosfila(0))
                            oSheet.cells(i + 1, j) = item.SubItems(2).Text
                            oSheet.cells(i + 2, j) = "Usuario:"
                            oSheet.cells(i + 2, j + 1) = item.SubItems(0).Text
                            oSheet.cells(i + 3, j) = " Password:"
                            oSheet.cells(i + 3, j + 1) = item.SubItems(1).Text
                            oSheet.cells(i + 4, j) = "Telefono: " & datosfila(2)

                            j = j + 2
                        Next
                        oExcel.ActiveWorkbook.save()
                        oExcel.ActiveWorkbook.Close()
                        oExcel.Quit()
                        oExcel = Nothing

    Y me mensaje en el que dice "No se encuentra el miembro publico woorksheets en el tipo worbook"  al igual que el select. Podrían ayudarme por favor y corregirme en mi error, eh intentado de diversas formas, pero estoy ya un poco perdido entre los libros y las hojas. De antemano muchas gracias

    miércoles, 31 de agosto de 2016 7:56

Respuestas

  • "danielneria" escribió:

    > Y me mensaje en el que dice "No se encuentra el miembro publico woorksheets en el tipo worbook"
    >
    > Dim oExcel As Object
    > Dim oBook As Object
    > Dim oSheet As Object
    > oExcel = CreateObject("Excel.Application")
    > oExcel.Visible = True
    > oBook.Workbooks.Open(RutaMunos & "\MuNOS\Tickets" & "\TicketsUsuario" & FechaHora & ".xlsx")
    > oSheet = oExcel.Woorksheets

    Hola:

    Digo yo que ANTES de ese mensaje de error obtendrás otro, porque si te fijas bien en las siguientes líneas

    > Dim oBook As Object
    > oBook.Workbooks.Open(RutaMunos & "\MuNOS\Tickets" & "\TicketsUsuario" & FechaHora & ".xlsx")

    El valor de la variable oBook es Nothing, ya que NO OBSERVO por ninguna parte que esté inicializada, por lo que me extraña muchísimo que puedas referenciar, primero la colección Workbooks, y después llamar a su método Open sin recibir ningún mensaje de error.

    Mejor será que referencies los diferentes objetos como indico a continuación:

            ' Referenciamos la aplicación de Excel.
            Dim oExcel As Object = CreateObject("Excel.Application")
            oExcel.Visible = True
    
            ' Referenciamos la colección de libros.
            Dim oBooks As Object = oExcel.Workbooks
    
            ' Abrimos el libro de trabajo
            Dim oBook As Object = oBooks.Open(RutaMunos & "\MuNOS\Tickets" & "\TicketsUsuario" & FechaHora & ".xlsx")
    
            ' Referenciamos la colección de hojas de calculo
            ' correspondientes al libro de trabajo actual.
            '
            Dim oSheets As Object = oBook.Worksheets
    
            ' Referenciamos la primera hoja de cálculo de
            ' la colección de hojas.
            '
            Dim oSheet As Object = oSheets(1)

    Desde luego, no esperes que el proceso de Excel desaparezca del Administrador de tareas cuando finalice tu aplicación, ya que estás creando los objetos de Excel en tiempo de ejecución y referenciándolos mediante variables del tipo Object, cuando lo correcto sería que en tu proyecto referenciaras el ensamblado de interoperabilidad primario de Excel correspondiente a la versión de Microsoft Excel que tengas instalada en tu equipo, y crearas los objetos correspondientes en tiempo de diseño.

    Si deseas conocer cómo se crean y liberan los diferentes objetos de Excel, échale un vistazo a la siguiente conversación:

    Terminar proceso de excel desde vb.net

    Y si no deseas referenciar en tu proyecto la biblioteca de objetos de Excel, entonces utiliza la reflexión que nos proporciona el marco de trabajo de .net, tal y como muestro en una respuesta mía que encontrarás en la siguiente conversación:

    Asignar formato a primera columna en importación de datos desde Excel

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 31 de agosto de 2016 17:42
    Moderador

Todas las respuestas

  • Te falta seleccionar la hoja en lugar de la línea oSheet = oExcel.WorkSheets debes hacer la selección de la hoja con algop como

    ws = oBook.Worksheets(1)

    Con eso estarías seleccionando la hoja 1. También puedes hacer esa selección por el nombre de la hoja.


    Saludos, Javier J


    miércoles, 31 de agosto de 2016 8:11
  • Gracias javier, ya lo intente de esa manera y me muestra un mensaje "No se encuentra el miembro publico 'Worksheets en el tipo 'worbook''"
    miércoles, 31 de agosto de 2016 11:42
  • Claro, WorkSheets es una propiedad del libro:

    ws = oBook.Worksheets(1)


    Saludos, Javier J

    miércoles, 31 de agosto de 2016 11:56
  • Claro que lo es, y no entiendo porque me marca el error, anteriormente lo que hacia era generar el archivo y escribir en él y hasta ahí todo bien, no me marcaba ningún error en tiempo de ejecución, o puede ser que se me está pasando algún detalle? el código es el siguiente...

        Dim oExcel As Object
                        Dim oBook As Object
                        Dim oSheet As Object
                        oExcel = CreateObject("Excel.Application")
                        oBook = oExcel.Workbooks.Add
                        oSheet = oBook.Worksheets(1)
                       
                        For Each item As ListViewItem In ListView1.Items
                            If j > 8 Then
                                i = i + 5
                                j = 2
                            End If
                           With oSheet.range("A1:f5000")
                                .HorizontalAlignment = 3
                                .VerticalAlignment = 5
                            End With
                            oSheet.cells(i, j).select()
                            oSheet.Pictures.Insert(datosfila(0))
                            oSheet.cells(i, j) = (datosfila(1))
                            oSheet.cells(i + 1, j) = item.SubItems(2).Text
                            oSheet.cells(i + 2, j) = "Usuario:"
                            oSheet.cells(i + 2, j + 1) = item.SubItems(0).Text
                            oSheet.cells(i + 3, j) = " Password:"
                            oSheet.cells(i + 3, j + 1) = item.SubItems(1).Text
                            oSheet.cells(i + 4, j) = "Telefono: " & datosfila(2)
                            j = j + 2
                        Next
                        oExcel.Quit()
                        oExcel = Nothing

    miércoles, 31 de agosto de 2016 14:42
  • "danielneria" escribió:

    > Y me mensaje en el que dice "No se encuentra el miembro publico woorksheets en el tipo worbook"
    >
    > Dim oExcel As Object
    > Dim oBook As Object
    > Dim oSheet As Object
    > oExcel = CreateObject("Excel.Application")
    > oExcel.Visible = True
    > oBook.Workbooks.Open(RutaMunos & "\MuNOS\Tickets" & "\TicketsUsuario" & FechaHora & ".xlsx")
    > oSheet = oExcel.Woorksheets

    Hola:

    Digo yo que ANTES de ese mensaje de error obtendrás otro, porque si te fijas bien en las siguientes líneas

    > Dim oBook As Object
    > oBook.Workbooks.Open(RutaMunos & "\MuNOS\Tickets" & "\TicketsUsuario" & FechaHora & ".xlsx")

    El valor de la variable oBook es Nothing, ya que NO OBSERVO por ninguna parte que esté inicializada, por lo que me extraña muchísimo que puedas referenciar, primero la colección Workbooks, y después llamar a su método Open sin recibir ningún mensaje de error.

    Mejor será que referencies los diferentes objetos como indico a continuación:

            ' Referenciamos la aplicación de Excel.
            Dim oExcel As Object = CreateObject("Excel.Application")
            oExcel.Visible = True
    
            ' Referenciamos la colección de libros.
            Dim oBooks As Object = oExcel.Workbooks
    
            ' Abrimos el libro de trabajo
            Dim oBook As Object = oBooks.Open(RutaMunos & "\MuNOS\Tickets" & "\TicketsUsuario" & FechaHora & ".xlsx")
    
            ' Referenciamos la colección de hojas de calculo
            ' correspondientes al libro de trabajo actual.
            '
            Dim oSheets As Object = oBook.Worksheets
    
            ' Referenciamos la primera hoja de cálculo de
            ' la colección de hojas.
            '
            Dim oSheet As Object = oSheets(1)

    Desde luego, no esperes que el proceso de Excel desaparezca del Administrador de tareas cuando finalice tu aplicación, ya que estás creando los objetos de Excel en tiempo de ejecución y referenciándolos mediante variables del tipo Object, cuando lo correcto sería que en tu proyecto referenciaras el ensamblado de interoperabilidad primario de Excel correspondiente a la versión de Microsoft Excel que tengas instalada en tu equipo, y crearas los objetos correspondientes en tiempo de diseño.

    Si deseas conocer cómo se crean y liberan los diferentes objetos de Excel, échale un vistazo a la siguiente conversación:

    Terminar proceso de excel desde vb.net

    Y si no deseas referenciar en tu proyecto la biblioteca de objetos de Excel, entonces utiliza la reflexión que nos proporciona el marco de trabajo de .net, tal y como muestro en una respuesta mía que encontrarás en la siguiente conversación:

    Asignar formato a primera columna en importación de datos desde Excel

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 31 de agosto de 2016 17:42
    Moderador
  • Muchas gracias por la ayuda, me he confundido un poco con to eso de excel, pero revisaré la información que me dejas y aplicaré lo necesario para poder avanzar en esto de excel, del conocimiento y de la programación. Saludos
    miércoles, 31 de agosto de 2016 19:04
  •         ' Referenciamos la aplicación de Excel.
            Dim oExcel As Object = CreateObject("Excel.Application")
            oExcel.Visible = True
    
            ' Referenciamos la colección de libros.
            Dim oBooks As Object = oExcel.Workbooks
    
            ' Abrimos el libro de trabajo
            Dim oBook As Object = oBooks.Open(RutaMunos & "\MuNOS\Tickets" & "\TicketsUsuario" & FechaHora & ".xlsx")
    
            ' Referenciamos la colección de hojas de calculo
            ' correspondientes al libro de trabajo actual.
            '
            Dim oSheets As Object = oBook.Worksheets
    
            ' Referenciamos la primera hoja de cálculo de
            ' la colección de hojas.
            '
            Dim oSheet As Object = oSheets(1)

    Me fue de mucha ayuda el código con el cual me ayudaste, si pude ingresar los datos como quería y no me marca ningún error. lo que ahora intento hacer es seleccionar un grupo de celdas a partir de una celda activa, nuevamente estoy perdido en el tema, podrías brindarme un poco de ayuda por favor.

    jueves, 8 de septiembre de 2016 14:25