Automatizar Fox a Word

¿De ser factible podrías enviarme una rutina o procedimiento que permita automatizar el pase de los datos de una tabla hecha en Fox a Word?.

3 Respuestas

Respuesta
1
Algo te voy a poder ayudar, pero me vas a tener que esperar hasta el lunes. No tengo conmigo ejemplos ni documentación.
Perfecto!. Todo bien... mi correo es: (xxxxxx). Gracias
Ya te conseguí algo. Te va a servir para empezar.
Básicamente, tenés que crear el objeto Word y trabajar con sus métodos y propiedades (que varían dependiendo de tu versión de Word)
El objeto Word trabaja básicamente con colecciones. Por ejemplo, tenés la colección "Documents" que tiene los documentos abiertos, la colección "Tables", para todas las tablas que tenga el documento, etc.
oWord = CREATEOBJECT("Word.Application")      && Objeto Word
oWord.Documents.Add        && Crea un nuevo documento en blanco
oWord.Documents.Open(<archivo>)   && Abre un documento existente. Ojo!
                                                                  Tiene muchos otros parámetros opcionales
oWord. ActiveDocument. Range.text    && El contenido del texto del documento
oWord. ActiveDocument. Tables. Add(<ubicación>,<filas>,<columnas>) && Agregás una tabla
Y muchísimo más... es imposible poner todo acá.
Todo va a depender de lo que necesites hacer. Por ejemplo, si necesitás enviar a Word una ficha con datos personales de una persona, te recomiendo que te armes una plantilla que contenga una tabla. Cuando lo querés enviar desde VFP, abrís el documento plantilla que creaste (abrilo como solo lectura por las dudas) y vas poniendo los valores en las celdas que corresponda. El código sería algo así:
oWord = CREATEOBJECT("Word.Application")
oWord.Documents.Open("plantilla.doc",, .t.) && Este .t. es para abrirlo solo lectura
oWord.ActiveDocument.Tables(1).Cell(1,2).Range.Text = "Juan"
oWord.ActiveDocument.Tables(1).Cell(1,4).Range.Text = "Pérez"
OWord. ActiveDocument. SaveAs("empleado1.doc")
OWord. ActiveDocument. Close()
OWord. Quit
RELEASE oWord
Te paso la documentación de MSDN de Microsoft.
Espero te sirva. Suerte !
Respuesta
1
oWord = CREATEObject("Word.Application")
oWord.Visible = .T.
oWord.documents.add
titulo='Lista de Alumnos'
columnas=4
SELECT cur_alumno
count for curso=thisform.cmbcurso1.value to nroreg
*oWord.activedocument.content.Insertafter(titulo)
oWord.Selection.Font.Bold = .T.
oWord.Selection.Font.Size = 14
oword.Selection.Text=Cole
oWord.Selection.Font.Bold = .T.
oWord.Selection.Font.Size = 10
oWord.activedocument.content.InsertParagraphAfter
oWord.selection.movedown
oword.Selection.Text=fec
oWord.activedocument.content.InsertParagraphAfter
oWord.selection.movedown
oWord.activedocument.content.InsertParagraphAfter
oword.Selection.Text=Ges
oWord.activedocument.content.InsertParagraphAfter
oWord.selection.movedown
oWord.activedocument.content.InsertParagraphAfter   &&& inserta una linea en blanco
oWord.selection.movedown
oWord.Selection.Font.Bold = .T.
oWord.Selection.Font.Size = 14
***oWord.Selection.activedocument.content= wdAlignParagraphCenter
oword.Selection.Text=titulo
oWord.activedocument.content.InsertParagraphAfter
oWord.selection.movedown
***oWord.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
oWord.Selection.Font.Bold = .T.
oWord.Selection.Font.Size = 10
oword.Selection.Text=curs
oWord.activedocument.content.InsertParagraphAfter   &&& inserta una linea en blanco
oWord.selection.movedown
oWord.Selection.Font.Bold = .F.
oWord.Selection.Font.Size = 8
OWord. Activedocument. Content.InsertParagraphAfter   &&& inserta una linea en blanco
oWord.selection.movedown
oword. ActiveDocument. Content. Tables. Add(oword. Selection.range, nroreg+1, columnas)
 x=1
 * Escribe la cabecera para cada tabla
 oWord.ActiveDocument.Tables(x).Cell(1,1).Range.InsertAfter("NRO")
  oWord.ActiveDocument.Tables(x).Cell(1,2).Range.InsertAfter("CODE")
 oWord.ActiveDocument.Tables(x).Cell(1,3).Range.InsertAfter("N O M I N A")
 oWord.ActiveDocument.Tables(x).Rows(1).select
 oWord.selection.font.bold = .T.
 oWord.ActiveDocument.Tables(x).Rows(1).select
 ***oWord.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
 ** aqui empieza a escribir en Word desde el array 
 x=1
 linea=1
 go top
 Do While !eof()
   oWord.activedocument.tables(x).Cell(linea+1,1).Range.InsertAfter(RECNO())
   oWord.activedocument.tables(x).Cell(linea+1,2).Range.InsertAfter(codigo)
   oWord.activedocument.tables(x).Cell(linea+1,3).Range.InsertAfter(ALLTRIM(NOMINA))
   oWord.activedocument.content.InsertParagraphAfter
   oWord.selection.movedown
   linea=linea+1
   skip
 Enddo 
 oWord.WindowState = 1
RELEASE oWord
Respuesta
1
Si. Te paso el método que utilizo para Microsoft Word:
LcTexto = "llena esta variable con el texto que deseas escribir en el word"
loDocu=CREATEOBJECT("word.application")
lcArchivo = "NOMBRE_ARCHIVO"
*-- Creo un nuevo documento
loDoc = loDocu.Documents.ADD(,,0)
*-- Guardo el documento como ...
loDoc.SAVEAS(SYS(5)+CURDIR() +lcArchivo)
*-- Activo el documento
loDoc.ACTIVATE
*-- Comienzo a 'escribir' el documento
*loDocu.ActiveDocument.JustificationMode=0
WITH loDocu.SELECTION
.FONT.NAME = 'Times New Roman'
.FONT.SIZE = 12
.ParagraphFormat.ALIGNMENT = 3 && justificado
.TypeText(lctexto)
ENDWITH
loDocu.ActiveDocument.SAVE()
loDocu.ActiveDocument.CLOSE()
loDocu.Documents.OPEN(SYS(5)+CURDIR() +lcArchivo)
loDocu.VISIBLE=.T.
loDocu=.f.
*ESPERO TE SIRVA. SALU2!
Buena solución experto. Ahora bien: ¿Cómo hago para establecer el ancho de columnas de la tabla?
Disculpa, ¿el ancho de columnas de una tabla .DBF? ¿O de una tabla que quieres volcar a Fox?
Perdón, no he sido lo suficientemente claro... Me refiero al formato del documento en Word. Cuando hago la automatización y convierto la DBF a DOC se crea un documento con cuatro columnas, lo que quiero saber es como le doy a cada una de esas columnas el ancho que yo desee, porque actualmente cada columna automáticamente asume el mismo ancho...
THIS.oWord.ActiveDocument.JustificationMode=0  && justificación de texto
THIS.oWord.ActiveDocument.Shapes.AddCanvas(0,0,150,100) && left,top , aca deberias poder acomodar las columnas, de todas maneras no es sencillo lo q intentas hacer, te recomiendo que uses columnas pequeñas para no tener problemas.
No noto ningún cambio agregando a mi procedimiento esas dos lineas, posiblemente este haciendo algo mal. Especificamente, que tendria que hacer la expresiòn: THIS.oWord.ActiveDocument.Shapes.AddCanvas(0,0,150,100)... ¿esas posiciones 0,0.150,100 que indican experto?
Supuestamente indican el top y el left en cantidad de puntos, cuando supuestamente 28.35 puntos equivale a 1 cm. De todas maneras no sabría decirte porque no funciona, lo recomendable es que acomodes el tamaño de las columnas antes de volcarlo al documento de word.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas