Automatizar word

maria rg
11 de Marzo del 2010
Creo un documento word. En la primera linea quiero escribir un mensaje. A continuación, dibujar una tabla con 2 columnas. En la primera indicar un texto, y en la segunda columna, asignar el valor de un campo en una tabla .dbf que tengo abierta. Al pasar al siguiente registro, debería repetir el proceso, pero en la siguiente página.

El código que tengo hasta el momento es el siguiente, pero cuando ejecuto, el nº de finca, de cada registro que se lee, siempre lo pone en la celda especificada, pero siempre de la primera página.

¿Cómo indicar que escriba el registro en la tabla dibujada en Word, pero de la siguiente página?

¿Cómo saber si el usuario cerró word o aún permanece abierto?

*** codigo:
* tablas dibujadas en word con visual fox

*. Agregue el código siguiente al procedimiento Click del botones Command, del formulario principal:



*+++++
* crear objeto
oWord = CreateObject('Word.Application') && asignar a una variable (oWord) qué aplicación se va a utilizar

* comprobar si existe la aplicación word
if vartype(oWord) <> "O" && letra ó mayúscula
Messagebox("Problema con Word, al no estar instalado")
return
endif

* ocultar word
oWord.visible = .F.

* si no existe documento, se crea
if .not. file("c:autowordmicarta.doc")
* crear documento
oDoc=oWord.Documents.Add()
* guardar como...
oWord.ActiveDocument.SaveAs("c:autowordmicarta.doc")
else
* abrir documento, al ya existir
oDoc= oWord.Documents.Open("c:autowordmicarta.doc")
* si queremos abrir el documento de solo lectura: oDocument = oWord.Documents.Open(_Docuemtno,,.T.)
* comprobar si pudo abrir el documento
if vartype(oWord) <> "O" && letra ó mayúscula
oWord.Application.Quit(0) && sale sin salvar y sin preguntar
oWord= .NULL.
Messagebox("No se ha podido abrir el documento")
return
endif
endif

* características página del programa que utilizamos (oWord)
with oWord.ActiveDocument.PageSetup
* características del documento:
.orientation = 0 && orientación página vertical
.TopMargin = 70 && margen superior
.BottomMargin = 65 && margen inferior
.LeftMargin = 85 &&80 && margen izq
.RightMargin = 85 &&84 && marquen derecho
endwith


* variables:
wdCollapseEnd = 0
wdCollapseStart = 1
wdParagraph = 4

oRange = oDoc.Range() && saber en donde está el puntero de insercción del documento
oRange.Collapse(wdCollapseStart) && posicionar el puntero de insercción del documento a la posición de la variable(wdCollapseStart)

select 1 && temap.dbf
go top
do while .not. eof()
do c:autowordprogr3.prg && confeccion del documento
skip
enddo

oWord.Visible = .T. && Inspect the results(Inspeccione los resultados); Muestra el resultado del documento generado en word desde Visual Fox.


return


El programa progr.prg contiene las siguientes instrucciones:

* tablas dibujadas en word con visual fox


oRange.InsertAfter("texto antes de tabla INDICANDO FINCA: "+finca)
oRange.InsertParagraphAfter()
oRange = oDoc.Range()
oRange.Collapse(wdCollapseEnd)



* primera tabla
* definir primera tabla (5 filas, 4 columnas)

oWord.ActiveDocument.Tables.Add(oRange,5,4,1,0)
oTable = oWord.ActiveDocument.Tables(1)
* escribir contenido tabla
oTable.cell(1,1).Range.InsertAfter(finca) && siempre escribe datos en la página 1, en la tabla dibujada... no pasa a dibujar tabla en la siguiente página...
oTable.cell(1,2).Range.InsertAfter(clave)
oTable.cell(1,3).Range.InsertAfter("celda 3")
oTable.cell(1,4).Range.InsertAfter("celda 4")
oTable.cell(2,2).Range.InsertAfter("2,2")

* ponerse en la siguiente línea del documento
oRange = oDoc.Range()
oRange.Collapse(wdCollapseEnd)

* nueva tabla:
oWord.ActiveDocument.Tables.Add(oRange,2,4,0,0)
oTable = oWord.ActiveDocument.Tables(2)

* esto lo que hace, es salir de la tabla, ponerse en la siguiente línea del documento
oRange = oDoc.Range()
oRange.Collapse(wdCollapseEnd)

* texto lo escribo después de la última tabla
oRange.InsertAfter("fin texto despues de ultima tabla")
oRange.InsertParagraphAfter()
oRange = oDoc.Range()
oRange.Collapse(wdCollapseEnd)


* quiero situar el punto de insercción de word, al final de la última tabla creada:
oRange.InsertParagraphAfter()
oRange = oDoc.Range()
oRange.Collapse(wdCollapseEnd)

oRange.InsertBreak && crea una nueva hoja


* quiero situar el punto de insercción de word, en una línea nueva
oRange.InsertParagraphAfter()
oRange = oDoc.Range()
oRange.Collapse(wdCollapseEnd)



return


Alberto Aviles
11 de Marzo del 2010
Hola Mary.

acabo de checar tu código y me parece muy interesante, yo estoy iniciando en la automatización de word desde VFP9. Quisiera saber si puedes ayudarme, necesito:
1. Abrir un documento existente (que es algo asi como un machote)
2. Pegar texto arriba de la hoja 1 para poner títulos
3. Pegar una tabla de excel de que la cual ya la tengo en una variable y moverla de posición para acomodarla en la hoja.
4. Pegar una gráfica de excel que ya tengo en una vcariable y moverla de posición para acomodarla en la hoja.

ojalá puedas ayudarme.

mil gracias

PD.
¡¡¡¡¡¡ ME URGE !!!!!!!!!!