none
Rellenar tabla de word con datagridview en vb.net RRS feed

  • Pregunta

  • Junto con saludar, tengo una duda lo que pasa es que tengo un documento predefinido en word y me encuentro rellenando los datos desde vb.net y funciona perfecto pero ahora me toco rellenar una tabla y no me va creando los campos para abajo sino que me los tira en una sola linea. quisiera saber como pasar los datos de mi datagridview a la tabla de word.

    para rellenar los otros datos uso el siguiente código pero para la tabla no me funciona.

    Quise hacerlo con un ciclo pero de todas maneras no me va creando las filas hacia abajo sino que me las rellena en una.

    me encuentro utilizando los marcadores de word.

      Dim MSWord As New Word.Application
            Dim Documento As Word.Document


            MsgBox("El TDR se guardará en : C:\Users\fernando\Desktop\documento de salida.docx")

            FileCopy("D:\Matricula\Matricula\Archivo\matricula.doc", "C:\Users\Fernando\Desktop\documento de salida.doc")
            Documento = MSWord.Documents.Open("C:\Users\Fernando\Desktop\documento de salida.doc")

            Documento.Bookmarks.Item("apellidopaterno").Range.Text = txtApellidoPaterno.Text
            Documento.Bookmarks.Item("apellidomaterno").Range.Text = txtApellidoMaterno.Text
            Documento.Bookmarks.Item("nombres").Range.Text = txtNombres.Text()
            Documento.Bookmarks.Item("cedulaidentidad").Range.Text = txtCedula.Text
            Dim sarampion As String
            If checkSarampion.Checked = True Then
                sarampion = "X"
            Else
                sarampion = ""
            End If
            Documento.Bookmarks.Item("sampiom").Range.Text = sarampion

            Documento.Save()
            MSWord.Visible = True

    Atte. Muchas Gracias por la ayuda.

    • Cambiado Karen Malagón martes, 21 de abril de 2015 17:36 Programming with Word
    jueves, 16 de abril de 2015 15:16

Todas las respuestas

  • Hola:

     Podrías valerte de DOCX para operar con el archivo Word, en el link podrás encontrar muchos ejemplos incluido el trabajo con tablas.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 16 de abril de 2015 16:36
  • Si pero tengo todo el documento ya realizado con  los datos correspondientes solo me falta llenar una tabla y eso me tiene complicado por que no me da los saltos de linea me muestra todo junto.
    jueves, 16 de abril de 2015 17:46
  • Hola:
    En un Form con 1 DataGridView y 1 Button, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports Microsoft.Office.Interop

    Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim loDataTable As DataTable = CType(DataGridView1.DataSource, DataTable)
            ' Creamos la tabla en un documento de Word. Para ello, primero referenciamos un objeto Word.Application nuevo.
            Dim loAplicacion As New Word.Application
            Dim loDocumento As Word.Document = gF_CrearTablaWord(loAplicacion, loDataTable)
            If Not loDocumento Is Nothing Then
                With loDocumento
                    .SaveAs("C:\Carpeta\TU_FICHERO.DOCX")
                    .Close()
                End With
            End If
            ' Cerramos Word y liberamos los recursos asociados.
            loAplicacion.Quit()
            loAplicacion = Nothing
        End Sub

        Private Function gF_CrearTablaWord(ByVal app As Word.Application, ByVal vdtDataTable As DataTable) As Word.Document
            ' Si alguno de los parámetros no se encuentra referenciado, abandonamos la función.
            If (app Is Nothing) OrElse (vdtDataTable Is Nothing) Then
                Return Nothing
            End If
            Dim loDocumento As Word.Document = Nothing
            Try
                ' Número de columnas que tendrá la tabla.
                Dim liNumColumnas As Int32 = vdtDataTable.Columns.Count
                ' Número de filas que tendrá la tabla, que será una fila más que las existentes en el objeto DataTable, porque la primera fila la utilizaremos para escribir el nombre de las columnas.
                Dim liNumFilas As Int32 = vdtDataTable.Rows.Count + 1
                ' Referenciamos el documento de Word, añadiendo un nuevo documento a la colección Documents.
                loDocumento = app.Documents.Add()
                ' Definimos el área del documento de Word, donde crearemos la tabla. Al no existir todavía carácter alguno, tanto la posición de los caracteres inicial y final será cero.
                Dim range As Word.Range = loDocumento.Range(0, 0)
                Dim table As Word.Table = loDocumento.Tables.Add(range, liNumFilas, liNumColumnas)
                ' Insertamos los encabezados de columna de la tabla, que se corresponderán con los nombres de los campos.
                For col As Int32 = 1 To liNumColumnas
                    Dim cell As Word.Cell = table.Rows(1).Cells(col)
                    cell.Range.Text = vdtDataTable.Columns(col - 1).ColumnName
                Next
                ' Insertamos las filas en la tabla, comenzando por la fila número 2, ya que la primera fila está ocupada por el nombre de las columnas.
                For row As Int32 = 2 To table.Rows.Count
                    Dim liContador As Int32 = 0
                    For Each cell As Word.Cell In table.Rows(row).Cells
                        ' Insertamos el valor de las celdas.
                        cell.Range.Text = vdtDataTable.Rows(row - 2).Item(liContador).ToString
                        liContador += 1
                    Next
                Next
                ' Formateamos la tabla para que se ajuste a su contenido.
                table.AutoFitBehavior(Word.WdAutoFitBehavior.wdAutoFitContent)
                ' Devolvemos la referencia al documento que se ha creado.
                Return loDocumento
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lF_CrearTablaWord", MessageBoxButtons.OK, MessageBoxIcon.Information)
                If Not loDocumento Is Nothing Then
                    ' Indicamos que el documento ya ha sido guardado, y lo cerramos
                    loDocumento.Saved = True
                    loDocumento.Close()
                End If
                Return Nothing
            End Try
        End Function
    End Class

    Un saludo desde Bilbo
    Carlos

    viernes, 17 de abril de 2015 7:36
  • Muchas gracias por la ayuda y el código pero lo que necesito no es crear la tabla sino llenar una tabla ya creada en Word desde los datos de una grilla, de todas maneras muchas gracias.
    viernes, 17 de abril de 2015 11:40
  • Hola:
    ¿Has probado el ejemplo?
    El ejemplo crea una tabla, y la llena de datos que es lo que tu quieres.

    Un saludo desde Bilbo
    Carlos

    lunes, 20 de abril de 2015 8:08
  • Si probé el ejemplo, pero necesito seleccionar la tabla que quiero que ingresen los datos ya que la tabla ya la tengo creada en word y necesito que la identifique ya que tengo 3 tablas distintas en las cuales necesito realizar lo mismo pero con otros datos.
    martes, 21 de abril de 2015 12:27