Autor
|
Tema: Crear archivo WORD con columnas (Leído 3,289 veces)
|
rapbyone
Desconectado
Mensajes: 173
|
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.  Gracias amigos Private Sub MakeWordDoc(ByVal file_name As String, ByVal title As String, ByVal body As String) On Error Resume Next Dim word_app As Word.Application Dim word_doc As Word.Document ' Open Word and create a document. Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Write the title. word_app.ActiveWindow.Selection.Font.Size = 25 word_app.ActiveWindow.Selection.Font.Name = "Arial" word_app.Selection.TypeText title 'word_app.ActiveWindow.Selection.Font.Size = 24 ' Save the file. word_doc.SaveAs FileName:=file_name ' Close the document and Word. word_doc.Close True word_app.Quit False End Sub
|
|
|
En línea
|
|
|
|
EdePC
|
Saludos, Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.tablePara tu ejemplo quedaría más o menos así: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) Set rng = word_doc.Range(Start:=0, End:=0) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
|
|
|
En línea
|
|
|
|
rapbyone
Desconectado
Mensajes: 173
|
Saludos, Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.tablePara tu ejemplo quedaría más o menos así: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) Set rng = word_doc.Range(Start:=0, End:=0) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Muchas gracias estimado, funcionó de maravilla.
|
|
|
En línea
|
|
|
|
rapbyone
Desconectado
Mensajes: 173
|
Saludos, Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.tablePara tu ejemplo quedaría más o menos así: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) Set rng = word_doc.Range(Start:=0, End:=0) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False 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.
|
|
|
En línea
|
|
|
|
EdePC
|
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: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Inserta un título al final del documento (al inicio porque está vacío) word_doc.Content.InsertAfter "Mi Título" ' Inserta una tabla despues del primer párrafo (despues del título) Set rng = word_doc.Range(word_doc.Paragraphs(1).Range.End - 1, word_doc.Paragraphs(1).Range.End) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
|
|
|
En línea
|
|
|
|
rapbyone
Desconectado
Mensajes: 173
|
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: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Inserta un título al final del documento (al inicio porque está vacío) word_doc.Content.InsertAfter "Mi Título" ' Inserta una tabla despues del primer párrafo (despues del título) Set rng = word_doc.Range(word_doc.Paragraphs(1).Range.End - 1, word_doc.Paragraphs(1).Range.End) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False 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
|
|
|
En línea
|
|
|
|
EdePC
|
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: Private Sub mkdoc2() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Inserta un título al final del documento (al inicio porque está vacío) word_doc.Content.InsertAfter "Son escasas las casas, pero mi casa es mi casa" ' Inserta una tabla despues de la primera palabra "casa" Set rng = word_doc.Content rng.Find.Execute FindText:="casa", MatchWholeWord:=True If rng.Find.Found = True Then Set rng = word_doc.Range(Start:=rng.End, End:=rng.End) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant End If word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
|
|
|
En línea
|
|
|
|
rapbyone
Desconectado
Mensajes: 173
|
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: Private Sub mkdoc2() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Inserta un título al final del documento (al inicio porque está vacío) word_doc.Content.InsertAfter "Son escasas las casas, pero mi casa es mi casa" ' Inserta una tabla despues de la primera palabra "casa" Set rng = word_doc.Content rng.Find.Execute FindText:="casa", MatchWholeWord:=True If rng.Find.Found = True Then Set rng = word_doc.Range(Start:=rng.End, End:=rng.End) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant End If word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Estimado, agradezco la ayuda, funcionó perfecto, muchas gracias amigo 
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Leer un archivo word con php
PHP
|
memosky
|
3
|
9,419
|
3 Abril 2009, 04:25 am
por memosky
|
|
|
Agregar columnas a archivo CVS
Scripting
|
abnervg413eh
|
1
|
3,950
|
9 Diciembre 2011, 23:01 pm
por abnervg413eh
|
|
|
Como crear columnas en tiempo de ejecucion
.NET (C#, VB.NET, ASP)
|
USLO
|
3
|
3,698
|
7 Noviembre 2012, 21:22 pm
por spiritdead
|
|
|
contraseña en archivo de word
Programación C/C++
|
tutospaindani
|
0
|
1,600
|
15 Noviembre 2013, 17:23 pm
por tutospaindani
|
|
|
Independizar tamaño de columnas en tablas de Word 2013.
Software
|
Tachikomaia
|
3
|
9,439
|
28 Febrero 2024, 10:01 am
por Tachikomaia
|
|