Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: rapbyone en 26 Abril 2021, 16:53 pm



Título: Crear archivo WORD con columnas
Publicado por: rapbyone en 26 Abril 2021, 16:53 pm
Estimados, tengo la siguiente función con la cual creo un archivo word (.doc) pero no consigo dar con el codigo para insertar una tabla.

Agradecería su ayuda.  :rolleyes:
Gracias amigos

Código
  1. Private Sub MakeWordDoc(ByVal file_name As String, ByVal title As String, ByVal body As String)
  2. On Error Resume Next
  3. Dim word_app As Word.Application
  4. Dim word_doc As Word.Document
  5.  
  6. ' Open Word and create a document.
  7. Set word_app = New Word.Application
  8. Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument)
  9.  
  10.  
  11.    ' Write the title.
  12.  
  13.  
  14.    word_app.ActiveWindow.Selection.Font.Size = 25
  15.    word_app.ActiveWindow.Selection.Font.Name = "Arial"
  16.        word_app.Selection.TypeText title
  17.    'word_app.ActiveWindow.Selection.Font.Size = 24
  18.  
  19.  
  20.    ' Save the file.
  21.    word_doc.SaveAs FileName:=file_name
  22.  
  23.    ' Close the document and Word.
  24.    word_doc.Close True
  25.    word_app.Quit False
  26. End Sub
  27.  



Título: Re: Crear archivo WORD con columnas
Publicado por: EdePC en 27 Abril 2021, 18:35 pm
Saludos,

Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.table

Para tu ejemplo quedaría más o menos así:

Código
  1. Private Sub mkdoc()
  2.  Dim word_app As Word.Application
  3.  Dim word_doc As Word.Document
  4.  Dim tbl As Word.Table
  5.  Dim rng As Word.Range
  6.  
  7.  Set word_app = New Word.Application
  8.  Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument)
  9.  
  10.  Set rng = word_doc.Range(Start:=0, End:=0)
  11.  Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4)
  12.  tbl.AutoFormat Format:=wdTableFormatElegant
  13.  
  14.  word_doc.SaveAs FileName:="docu"
  15.  word_doc.Close True
  16.  word_app.Quit False
  17. End Sub


Título: Re: Crear archivo WORD con columnas
Publicado por: rapbyone en 27 Abril 2021, 22:15 pm
Saludos,

Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.table

Para tu ejemplo quedaría más o menos así:

Código
  1. Private Sub mkdoc()
  2.  Dim word_app As Word.Application
  3.  Dim word_doc As Word.Document
  4.  Dim tbl As Word.Table
  5.  Dim rng As Word.Range
  6.  
  7.  Set word_app = New Word.Application
  8.  Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument)
  9.  
  10.  Set rng = word_doc.Range(Start:=0, End:=0)
  11.  Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4)
  12.  tbl.AutoFormat Format:=wdTableFormatElegant
  13.  
  14.  word_doc.SaveAs FileName:="docu"
  15.  word_doc.Close True
  16.  word_app.Quit False
  17. End Sub

Muchas gracias estimado, funcionó de maravilla.


Título: Re: Crear archivo WORD con columnas
Publicado por: rapbyone en 2 Mayo 2021, 03:17 am
Saludos,

Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.table

Para tu ejemplo quedaría más o menos así:

Código
  1. Private Sub mkdoc()
  2.  Dim word_app As Word.Application
  3.  Dim word_doc As Word.Document
  4.  Dim tbl As Word.Table
  5.  Dim rng As Word.Range
  6.  
  7.  Set word_app = New Word.Application
  8.  Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument)
  9.  
  10.  Set rng = word_doc.Range(Start:=0, End:=0)
  11.  Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4)
  12.  tbl.AutoFormat Format:=wdTableFormatElegant
  13.  
  14.  word_doc.SaveAs FileName:="docu"
  15.  word_doc.Close True
  16.  word_app.Quit False
  17. End Sub

Estimado, como puedo hacer para crear la tabla como continuación de otro elemento. al establecer el rango (.Range(Start:=0, End:=0)) la tabla se crea al principio del documento. mi idea es que la tabla salga después de un título por ejemplo, pero no a través de un rango especifico, por que el texto previo va variando y por ende el rango irá cambiando también, espero me haya dado a entender.

Gracias por tu ayuda.


Título: Re: Crear archivo WORD con columnas
Publicado por: EdePC en 2 Mayo 2021, 05:04 am
Siempre puedes referirte a objetos del documento como palabras o párrafos para obtener un Rango adecuado, por ejemplo tomemos como primer párrafo a tu Título, entonces obtenemos un Rango que sea el último elemento de dicho párrafo (el salto de línea) e insertamos ahí la tabla:

Código
  1. Private Sub mkdoc()
  2.  Dim word_app As Word.Application
  3.  Dim word_doc As Word.Document
  4.  Dim tbl As Word.Table
  5.  Dim rng As Word.Range
  6.  
  7.  Set word_app = New Word.Application
  8.  Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument)
  9.  
  10.  ' Inserta un título al final del documento (al inicio porque está vacío)
  11.  word_doc.Content.InsertAfter "Mi Título"
  12.  
  13.  ' Inserta una tabla despues del primer párrafo (despues del título)
  14.  Set rng = word_doc.Range(word_doc.Paragraphs(1).Range.End - 1, word_doc.Paragraphs(1).Range.End)
  15.  Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4)
  16.  tbl.AutoFormat Format:=wdTableFormatElegant
  17.  
  18.  word_doc.SaveAs FileName:="docu"
  19.  word_doc.Close True
  20.  word_app.Quit False
  21. End Sub


Título: Re: Crear archivo WORD con columnas
Publicado por: rapbyone en 2 Mayo 2021, 09:31 am
Siempre puedes referirte a objetos del documento como palabras o párrafos para obtener un Rango adecuado, por ejemplo tomemos como primer párrafo a tu Título, entonces obtenemos un Rango que sea el último elemento de dicho párrafo (el salto de línea) e insertamos ahí la tabla:

Código
  1. Private Sub mkdoc()
  2.  Dim word_app As Word.Application
  3.  Dim word_doc As Word.Document
  4.  Dim tbl As Word.Table
  5.  Dim rng As Word.Range
  6.  
  7.  Set word_app = New Word.Application
  8.  Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument)
  9.  
  10.  ' Inserta un título al final del documento (al inicio porque está vacío)
  11.  word_doc.Content.InsertAfter "Mi Título"
  12.  
  13.  ' Inserta una tabla despues del primer párrafo (despues del título)
  14.  Set rng = word_doc.Range(word_doc.Paragraphs(1).Range.End - 1, word_doc.Paragraphs(1).Range.End)
  15.  Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4)
  16.  tbl.AutoFormat Format:=wdTableFormatElegant
  17.  
  18.  word_doc.SaveAs FileName:="docu"
  19.  word_doc.Close True
  20.  word_app.Quit False
  21. End Sub

Entiendo, el problema es que el contenido del word va variando y los párrafos van cambiando, hay alguna manera de que por ejemplo el rango se defina a través de una palabra? por ejemplo, que inserte la tabla después de la palabra "casa".

Gracias por la ayuda amigo


Título: Re: Crear archivo WORD con columnas
Publicado por: EdePC en 2 Mayo 2021, 17:44 pm
Es ese caso puedes buscar (.Find) en el documento la palabra que quieras, obtener a partir de esa palabra un nuevo Rango e insertar ahí tu tabla:

Código
  1. Private Sub mkdoc2()
  2.  Dim word_app As Word.Application
  3.  Dim word_doc As Word.Document
  4.  Dim tbl As Word.Table
  5.  Dim rng As Word.Range
  6.  
  7.  Set word_app = New Word.Application
  8.  Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument)
  9.  
  10.  ' Inserta un título al final del documento (al inicio porque está vacío)
  11.  word_doc.Content.InsertAfter "Son escasas las casas, pero mi casa es mi casa"
  12.  
  13.  ' Inserta una tabla despues de la primera palabra "casa"
  14.  Set rng = word_doc.Content
  15.  rng.Find.Execute FindText:="casa", MatchWholeWord:=True
  16.  
  17.  If rng.Find.Found = True Then
  18.    Set rng = word_doc.Range(Start:=rng.End, End:=rng.End)
  19.    Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4)
  20.    tbl.AutoFormat Format:=wdTableFormatElegant
  21.  End If
  22.  
  23.  word_doc.SaveAs FileName:="docu"
  24.  word_doc.Close True
  25.  word_app.Quit False
  26. End Sub
  27.  


Título: Re: Crear archivo WORD con columnas
Publicado por: rapbyone en 2 Mayo 2021, 19:33 pm
Es ese caso puedes buscar (.Find) en el documento la palabra que quieras, obtener a partir de esa palabra un nuevo Rango e insertar ahí tu tabla:

Código
  1. Private Sub mkdoc2()
  2.  Dim word_app As Word.Application
  3.  Dim word_doc As Word.Document
  4.  Dim tbl As Word.Table
  5.  Dim rng As Word.Range
  6.  
  7.  Set word_app = New Word.Application
  8.  Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument)
  9.  
  10.  ' Inserta un título al final del documento (al inicio porque está vacío)
  11.  word_doc.Content.InsertAfter "Son escasas las casas, pero mi casa es mi casa"
  12.  
  13.  ' Inserta una tabla despues de la primera palabra "casa"
  14.  Set rng = word_doc.Content
  15.  rng.Find.Execute FindText:="casa", MatchWholeWord:=True
  16.  
  17.  If rng.Find.Found = True Then
  18.    Set rng = word_doc.Range(Start:=rng.End, End:=rng.End)
  19.    Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4)
  20.    tbl.AutoFormat Format:=wdTableFormatElegant
  21.  End If
  22.  
  23.  word_doc.SaveAs FileName:="docu"
  24.  word_doc.Close True
  25.  word_app.Quit False
  26. End Sub
  27.  

Estimado, agradezco la ayuda, funcionó perfecto, muchas gracias amigo  ;-)