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 !!!!!!!!!!