Autor Tema: exportar datos a libros excel en vb.net Visual Basic Microsoft.Office.Interop.Ex  (Leído 11330 veces)

katsumoto

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Buenas a todos/as estoy haciendo una aplicacion en la que necesito rellenar con datos de una BD una hoja prediseñada en excel por ejemplo nombre: lo cojo de la db apellidos: lo mismo etc, alguien me podria orientar o recomendarme algun articulo para estudiarlo???

Gracias de antemano
« Última modificación: 25 de Abril 2016, 17:11 por Alex Rodríguez »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:exportar datos a libros excel desde vb.net
« Respuesta #1 en: 22 de Abril 2016, 22:26 »
Responsable de departamento de producción aprenderaprogramar.com

katsumoto

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Re:exportar datos a libros excel desde vb.net
« Respuesta #2 en: 25 de Abril 2016, 13:47 »
gracias por la respuesta ya he podido exportar bien, pero ahora se me presenta otro problema me gustaria que me orientarais como hacer para que llegado a un numero determinado de filas me añadiera una fila mas para no sobre escribir sobre la fila de totales

este es el codigo con el que exporto
Código: [Seleccionar]
Dim exApp As New Microsoft.Office.Interop.Excel.Application
        Dim exLibro As Microsoft.Office.Interop.Excel.Workbook
        Dim exHoja As Microsoft.Office.Interop.Excel.Worksheet
        Dim contador_reg As Integer
        Try

            exLibro = exApp.Workbooks.Open(My.Application.Info.DirectoryPath + "\excel\cursos.xls")
            exHoja = exLibro.Worksheets(1)
            ' ¿Cuantas columnas y cuantas filas?
            Dim NCol As Integer = DGV.ColumnCount
            Dim NRow As Integer = DGV.RowCount
            exHoja.Cells(1, 5).value = lugar_eve.Text
            exHoja.Cells(1, 6).value = fecha_eve.Text
            For Fila As Integer = 0 To NRow - 1
                contador_reg = contador_reg + 1
                For Col As Integer = 0 To NCol - 1
                    ' pasa los datos a la hoja de excel
                    exHoja.Cells(Fila + 3, 1) = contador_reg
                    exHoja.Cells.Item(Fila + 3, Col + 2) = DGV.Rows(Fila).Cells(Col).Value()
                Next

            Next

            exApp.Application.Visible = True
            exHoja = Nothing
            exLibro = Nothing
            exApp = Nothing


        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error al exportar a Excel")

            Return False
        End Try
        Return True

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

No entiendo muy bien a qué te refieres, ¿el fichero excel tiene algún contenido previo? ¿Quieres añadir una fila vacía después de la última fila exportada o antes de la última fila exportada?

Te dejo un código a ver si te ayuda

Código: [Seleccionar]
Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = ""
        Label1.AutoSize = False
    End Sub
   
    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objXLApp As Excel.Application
        Dim intLoopCounter As Integer
        Dim objXLWb As Excel.Workbook
        Dim objXLWs As Excel.Worksheet
        Dim objRange As Excel.Range

        objXLApp = New Excel.Application
        objXLApp.Workbooks.Open("C:\Users\Cesar\CursoVB\ejemplo.xlsx")
        objXLWb = objXLApp.Workbooks(1)
        objXLWs = objXLWb.Worksheets(1)
        MsgBox("Ahora la celda A5 contiene: " & objXLWs.Cells(5, 1).value)
        For intLoopCounter = 1 To CInt(objXLWs.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row)
            objRange = objXLWs.Range("A" & intLoopCounter)
            Label1.Text = Label1.Text & vbCrLf & objRange.Value
            objRange = objXLWs.Range("B" & intLoopCounter)
            Label1.Text = Label1.Text & " -- > " & objRange.Value
        Next intLoopCounter

        'Escribimos en el fichero
        objXLWs.Cells(5, 1) = "Esto es una prueba"
        MsgBox("Ahora la celda A5 contiene: " & objXLWs.Cells(5, 1).value)
        objXLApp.Quit()
    End Sub

End Class


Saludos!
Responsable de departamento de producción aprenderaprogramar.com

katsumoto

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
la hoja tiene una cabecera y una fila de totales lo que quiero es que por mas filas que tenga el datagrid no me pase por encima la de totales
ejemplo:
nombre      apellidos     dni      cuota
----------     ------------    -----    ---------
pepe          lopez          1111     20
juan           perez          2222    30
totales                                      50

si en lugar de dos filas paso 3 o mas dichas filas se cargan en las correspondientes a totales y lo que quiero es que la fila de totales o se desplace hacia abajo o llegado al numero de fila de totales añada una y escriba en ella, no se si me explico

pero de todas formas gracias por molestarte en contestarme se agradece mucho.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola lo que yo entiendo es que después de añadir la información debes recalcular la fila con los totales, si no recalculas ya no reflejará el total. En totales puedes tener o bien una fórmula o bien un número directamente, pero en cualquier caso si es una fórmula tendrás que poner el nuevo rango de celdas y si es un número tendrás que hacer el cálculo para obtenerlo después de la actualización.

Si esto es correcto la idea sobre los pasos que habría que dar sería:

1) Insertar la información actualizada en el fichero excel de modo que

1.1) Si la información contiene más filas de las existentes, se inserta la información (eliminando la fila de totales). Luego habría que calcular el total, e insertar la fila de totales actualizada.

1.2) Si la información contiene menos filas de las existentes, se inserta la información, se borran las filas sobrantes. Luego habría que calcular el total, e insertar la fila de totales actualizada.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".