FoxPro/Visual FoxPro - COMBINAR FORMATO DE WORD CON DATOS VFP

 
Vista:
Imágen de perfil de cwilliam

COMBINAR FORMATO DE WORD CON DATOS VFP

Publicado por cwilliam (7 intervenciones) el 21/06/2015 21:59:41
Buen dia amigos.

necesito de la ayuda de ustedes ya que es muy urgente que termine lo que me han solicitado.
mi situacion es la siguiente:

estoy trabajando un sistema con VISUAL FOXPRO 9.0 con DBC y DBF. tengo un contrato que ya esta creado en WORD.
lo que necesito es enviar solo los campos que necesito al formato de word para que se imprima.
ya intente hacerlo combinando correspondencia de word, pero no me funciono. quiero saber si existe una clase o una forma de enviar los datos desde la dbf de visual foxpro hasta word.

realmente me urge resolver este problema.

me gustaria que sean lo mas explicativos posibles y si me pueden enviar el codigo seria mejor.

se los agradecere inmensamente.

de antemano gracias por su valiosa ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

COMBINAR FORMATO DE WORD CON DATOS VFP

Publicado por Angel Dario (5 intervenciones) el 05/09/2015 16:19:40
Mira a ver si esto te puede servir.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
*--------------------------------------------------
* Clase cWord
*--------------------------------------------------
DEFINE CLASS cWord AS CUSTOM
*--
* Propiedades
*--
oWord = .NULL. && Objeto Word
cDirApp = ADDBS(SYS(5) + SYS(2003))
cDirDat = ADDBS(HOME(2) + 'Northwind')
cDataSource = ''
*--------------------------------------------------
* Creo el servidor de automatización
*--------------------------------------------------
PROCEDURE CrearServidor()
*-- Creo el objeto
THIS.oWord = CREATEOBJECT('Word.Application')
RETURN VARTYPE(THIS.oWord) = 'O'
ENDPROC
*--------------------------------------------------
* Cierro el servidor de automatización
*--------------------------------------------------
PROCEDURE CerrarServidor()
*-- Cierro Word
THIS.oWord.QUIT()
THIS.oWord = .NULL.
RETURN
ENDPROC
*--------------------------------------------------
* Abro la Carta, si no existe la creo
*--------------------------------------------------
PROCEDURE AbrirCarta(tcArchivo)
LOCAL loDoc AS 'Word.Document'
tcArchivo = FORCEEXT(tcArchivo,'DOC')
IF NOT FILE(THIS.cDirApp + tcArchivo)
*-- Si no existe la carta, la creo
loDoc = THIS.CrearCarta(tcArchivo)
ELSE
*-- Si existe la carta, la abro
loDoc = THIS.oWord.Documents.OPEN(THIS.cDirApp + tcArchivo)
*-- y me aseguro que no tiene un documento asociado
loDoc.MailMerge.MainDocumentType = -1 && wdNotAMergeDocument
ENDIF
*-- Retorno un objeto Document
RETURN loDoc
ENDPROC
*--------------------------------------------------
* Creo la Carta
*--------------------------------------------------
PROCEDURE CrearCarta(tcArchivo)
LOCAL loDoc AS 'Word.Document'
*-- Creo un nuevo documento
loDoc = THIS.oWord.Documents.ADD(,,0)
*-- Guardo el documento como ...
loDoc.SAVEAS(THIS.cDirApp + tcArchivo)
*-- Activo el documento
loDoc.ACTIVATE
*-- Comienzo a 'escribir' el documento
WITH THIS.oWord.SELECTION
.FONT.NAME = 'Tahoma'
.FONT.SIZE = 10
.ParagraphFormat.ALIGNMENT = 2 && wdAlignParagraphRight
.TypeText('San Miguel de Tucumán, ' + DTOC(DATE()))
.TypeParagraph
.ParagraphFormat.ALIGNMENT = 0 && wdAlignParagraphLeft
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeText('Señores: ')
.FONT.Bold = .T.
.FIELDS.ADD(.RANGE, -1, 'MERGEFIELD CompanyName ')
.FONT.Bold = .F.
.TypeParagraph
.TypeText('At: ')
.FIELDS.ADD(.RANGE, -1, 'MERGEFIELD ContactName ')
.TypeParagraph
.FIELDS.ADD(.RANGE, -1, 'MERGEFIELD Address ')
.TypeParagraph
.FIELDS.ADD(.RANGE, -1, 'MERGEFIELD PostalCode')
.TypeText(' - ')
.FIELDS.ADD(.RANGE, -1, 'MERGEFIELD City ')
.TypeParagraph
.FONT.Underline = 1 && wdUnderlineSingle
.FIELDS.ADD(.RANGE, -1, 'MERGEFIELD Country ')
.FONT.Underline = 0 && wdUnderlineSingle
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeText(CHR(9) + 'Estimado/a ')
.FIELDS.ADD(.RANGE, -1, 'MERGEFIELD ContactName ')
.TypeParagraph
.TypeParagraph
.TypeText(CHR(9) + 'Nos dirigimos a Ud. con el objeto de comunicarle ' + ;
'la nueva dirección de nuestra empresa')
.TypeParagraph
.TypeParagraph
.FONT.Bold = .T.
.TypeText('Informática del Tucumán')
.FONT.Bold = .F.
.TypeParagraph
.TypeText('9 de Julio 123, 1° Piso')
.TypeParagraph
.TypeText('4000 - San Miguel de Tucumán')
.TypeParagraph
.TypeText('Tucumán, Argentina')
.TypeParagraph
.TypeText('Teléfono (+54) (381) 681-4521')
.TypeParagraph
.TypeParagraph
.TypeText(CHR(9) + 'Sin otro particular lo saludamos atte.')
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeParagraph
.TypeText('Manuel Belgrano')
.TypeParagraph
.TypeText('Socio Gerente')
.TypeParagraph
.TypeText('Informática del Tucumán')
.TypeParagraph
ENDWITH
*-- Retorno un objeto Document
RETURN loDoc
ENDPROC
*--------------------------------------------------
* Creo archivo DataSource
*--------------------------------------------------
PROCEDURE GenerarDataSource
LOCAL lcArchivo AS CHARACTER
IF NOT DBUSED('Northwind')
OPEN DATABASE (THIS.cDirDat + 'Northwind') SHARED
ENDIF
SET DATABASE TO 'Northwind'
*-- Consulta a los Clientes de Northwind
SELECT CompanyName, ContactName, ;
Address, PostalCode, City, Country ;
FROM Customers ;
INTO CURSOR Clientes
*-- Copio el cursor al archivo para combinar
lcArchivo = SYS(2015)
COPY TO (THIS.cDirApp + lcArchivo) TYPE CSV
USE IN Clientes
THIS.cDataSource = THIS.cDirApp + FORCEEXT(lcArchivo,'CSV')
RETURN
ENDPROC
*--------------------------------------------------
* Combino la Carta
*--------------------------------------------------
PROCEDURE CombinarCarta(toDoc)
WITH toDoc.MailMerge
.MainDocumentType = 0 && wdFormLetters
.OpenDataSource(THIS.cDataSource)
.Execute()
ENDWITH
WITH THIS.oWord
*-- Cambio la Carpeta del cuadro de diálogo 'Guardar...'
.ChangeFileOpenDirectory(THIS.cDirApp)
*-- Maximizo y hago visible
.WINDOWSTATE = 1 && wdWindowStateMaximize
.VISIBLE = .T. && True
ENDWITH
RETURN
ENDPROC
*--------------------------------------------------
* Guardo el Documento, si tlCierra = .T. lo cierra
*--------------------------------------------------
PROCEDURE GuardarCarta(toDoc, tlCierra)
*-- Guardo el documento
toDoc.SAVE()
IF tlCierra
*-- Cierro el documento
toDoc.CLOSE()
ENDIF
ENDPROC
ENDDEFINE
*--------------------------------------------------
* Fin Clase cWord
*--------------------------------------------------
El programa Combinar.prg
El siguiente es el código de nuestro programa "Combinar.prg" donde creamos una instancia de la clase cWord y comenzamos a ejecutar
los métodos de esa clase.
*-----------------------
*-------------------------------------------------
LOCAL lo AS OBJECT, loDoc AS OBJECT
lo = NEWOBJECT('cWord','cWord.prg')
IF lo.CrearServidor()
*-- Ejecuto métodos de la clase
loDoc = lo.AbrirCarta('MiCarta')
lo.GenerarDataSource()
lo.CombinarCarta(loDoc)
lo.GuardarCarta(loDoc, .T.)
ELSE
MESSAGEBOX('No se pudo instanciar el servidor', 16, 'Error!')
ENDIF
lo = .NULL.
RETURN
*-------------------------------------------------
* Fin Combinar.prg
*-------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

COMBINAR FORMATO DE WORD CON DATOS VFP

Publicado por marcelo (70 intervenciones) el 18/03/2020 20:52:37
como hago para reducir el interlineado ..?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar