FoxPro/Visual FoxPro - Excel intercambia el dia por el mes

 
Vista:

Excel intercambia el dia por el mes

Publicado por Jose Rosales (1 intervención) el 19/05/2016 20:50:38
Buenas tardes,

Quisiera compartir mi experiencia debido a que soy novato programando en fox y buscando hasta el cansancio la web no me ayudó a resolver mi problema.

Resulta que tengo un programa en visual fox pro que descarga cierta información a excel, la información contiene tanto datos numéricos, caracteres y fechas. El problema se daba a que la información de la fecha en VFP se mostraba de forma correcta (D/M/Y), pero al momento de abrir el archivo en excel esta fecha invertía el día con el mes dejando así una fecha 04/05/2016 de esta forma 05/04/2016.
Los días mayores a 12 me los mostraba de otra forma por ejemplo: si tenia la fecha 23/05/2016 me los mostraba asi: 20160523

Se imaginan lo que tenia que hacer, buscar y reemplazar textos por fechas correctas buscando dia por dia y mes por mes, mis archivos contenían miles de filas y era demasiado tedioso.

Me recomendaron revisar la configuración regional de Windows, pero está estaba correcta, fui a las propiedades de celdas pero resulta que también estaba correcta, a tal punto que llegué a pensar que era configuración del office y descargué otro mas reciente y el resultado fue el mismo, coloque el comando set date to DMY y no lograba.


Para no hacerlas de cansadas al final resolví con la forma de mandar desde fox a exportar a excel.

Forma antigua con problema de fechas:

STORE "COPY TO Nombre_archivo.xls fox2" TO comando
&comando

Forma Correcta sin problemas:

COPY TO "Nombre_archivo.xls" TYPE XL5

Resulto ser algo tan sencillo pero que me llevó tiempo investigarlo y se que muchos que quizá ya saben este lenguaje les parezca tonto, comprendan que soy novato en fox, lo raro era que solo en mi computadora fallaba la forma antigua, a otro amigo le funcionaba a la perfección, por lo que descartaba la posibilidad que el programa estuviera mal. El asunto es que si tienes este problema en algún momento quizá sea la forma que estas usando para exportar a excel.

Saludos...
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

Excel intercambia el dia por el mes

Publicado por Saúl Hernández Aguilar (728 intervenciones) el 20/05/2016 16:42:40
Te dejo otra alternativia.

Aunque es mas laboriosa hacerla pero de una vez puedes dar formato a tu hoja excel.


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
crutinaerroractual = ON("Error")
lhuboerror = .F.
ON ERROR LHUBOERROR = .T.
oexcel = CREATEOBJECT("Excel.Application")
ON Error &cRutinaErrorActual
IF lhuboerror
     nresp = MESSAGEBOX("¿Desea generar una lista sin formato?", 35,"Excel NO esta instalado en esta computadora.")
     IF nresp = 6
          generacsv()
     ENDIF
ELSE
     generahojaelectronica()
ENDIF
RETURN
ENDPROC
 
** Si no Existe excel Quiere mandar a un Archivo
PROCEDURE GeneraCSV
carchivo = GETFILE("Hoja excel:XLS",  ;
           "Archivo Excel",  ;
           "Grabar", 0)
IF EMPTY(carchivo)
     = MESSAGEBOX("Debe seleccionar un nombre de archivo.",64, "Error")
ELSE
     COPY TO (carchivo) TYPE XLS
     = MESSAGEBOX("El archivo fue grabado satisfactoriamente",0, "")
ENDIF
ENDPROC
 
**Cominesa a Generar la Hoja
PROCEDURE GeneraHojaElectronica
	WAIT WINDOW NOCLEAR NOWAIT  "Generando la hoja, espere un momento por favor."
 
	oexcel.workbooks.add()
	WITH oexcel.worksheets(1)
 
    *.- Cabecera ***********************************************************************
	.range("A1").value =  "Solo el centro de costo: " + ccentrocosto
    .range("A3").value = xempresa
    .range("A3:F3").select()
     WITH oexcel.selection
          .horizontalalignment = - 4108
          .mergecells = .T.
          .font.name = "Times New Roman"
          .font.bold = .T.
          .font.size = 20
     ENDWITH
     .range("A4").value = _TrMayor+" "+DToC(fFechaIni)+" AL "+DToC(fFechaFin)
     .range("A4:G4").select()
     WITH oexcel.selection
          .horizontalalignment = -4108
          .mergecells = .T.
          .font.name = "Times New Roman"
          .font.bold = .T.
          .font.size = 14
     ENDWITH
 
     .range("A6").value = "FECHA"
     .range("B6").value = "POLIZA"
     .range("C6").value = "EXPLICACION"
     .range("D6").value = "CARGOS"
     .range("E6").value = "ABONOS"
     .range("F6").value = "SALDO"
	*********FIN CABECERA
 
    .columns("A:A").columnwidth = 12
    .columns("B:B").columnwidth = 21
    .columns("C:C").columnwidth = 60
    .columns("D:D").columnwidth = 16
    .columns("F:F").columnwidth = 16
    .columns("G:G").columnwidth = 16
 
     .range("A6:F6").select()
     WITH oexcel.selection
          .borders(9).linestyle = 1
          .borders(9).weight = 4
          .wraptext = .T.
          .verticalalignment = -4107
     ENDWITH
     .range("F6:F6").select()
     WITH oexcel.selection
          .horizontalalignment = - 4152
     ENDWITH
 
 
	SELECT * FROM CuDiario;
	ORDER BY codigo_cta;
	GROUP BY codigo_cta;
	INTO CURSOR _CurCuenta
 
	j   = 8
	nCont = 1
	jj  = ''
	nSaltoPagina = 1
	SELECT _CurCuenta
	GOTO TOP
	DO WHILE !EOF()
 
		  cj = ALLTRIM(STR(j, 10,0))
 
		 .range("A" + cj).value = 'Cuenta'
		 .range("B" + cj).value =  _CurCuenta.codigo_cta+" "+_CurCuenta.Nombre_cta
 
		 *-Letra para Titulos
		 .range("A" + cj + ":F" + cj).select()
		  WITH oexcel.selection
        	  .font.name = "Times New Roman"
          	  .font.size = 11
          	  .font.bold = .T.
		  ENDWITH
 
           j = j + 2
 
			 *-Letra para Renglones
			 cj = ALLTRIM(STR(j, 10,0))
 
			 .range("A" + cj +":F" + cj).select()
			 WITH oexcel.selection
	        	  .font.name = "Calibri"
	          	  .font.size = 11
	          	  .font.bold = .F.
			 ENDWITH
 
			 ** Barre la tabla en el Excel
		     SELECT CuDiario
		     SET FILTER TO Codigo_cta = _CurCuenta.Codigo_cta
		     GOTO TOP
			 nSaldo = 0.00
			 nPaso = 0
		     SCAN ALL
 
				 cj = ALLTRIM(STR(j, 10,0))
 
				   *-Cuenta Contable
		          .range("A" + cj).value = Fecha_DPC
		          .range("B" + cj).value = NumeroDoc
		          .range("C" + cj).value = Alltrim(Alltrim(Nombre)+" "+Razon_Epl)
 				  .range("C" + cj).HorizontalAlignment = 6 		&&&---> Justifica
				  .range("C" + cj).VerticalAlignment = 4   		&&&---> Ajusta el contenido
 
			       IF Monto_DPc > 0.00
			          .range("D" + cj).value = Monto_Dpc
			       ENDIF
			       IF Monto_DPc < 0.00
		          	.range("E" + cj).value = Round(Monto_Dpc*-1,2)
		           ENDIF
 
		          .range("F" + cj).value = Inicial_Dpc + Monto_Dpc + nSaldo
 
				  nSaldo = Inicial_Dpc + Monto_Dpc + nSaldo
 
		          j = j + 1
 
		     ENDSCAN
 
			SELECT _CurCuenta
			SKIP
 
			j = j + 1
	ENDDO
	 j = j -1
	 i = j - 1
 
     cj = ALLTRIM(STR(j, 10, 0))
     ci = ALLTRIM(STR(i, 10, 0))
     .range("C" + cj).value =  "TOTALES"
     .range("D" + cj).value =  "=SUBTOTAL(9,D8:D" + ci + ")"
     .range("E" + cj).value =  "=SUBTOTAL(9,E8:E" + ci + ")"
     .range("F" + cj).value =  "=D" + cj + "-E"+cj
 
	 *-Pone Linea
     .range("D" + cj + ":F" + cj).select()
     WITH oexcel.selection
          .borders(8).linestyle = 1
          .borders(8).weight = 4
     ENDWITH
 
     .range("D8:F" + cj).select()
     oexcel.selection.numberformat =  "#,##0.00;[Red](#,##0.00);;@"
 
     WITH .pagesetup
          .printtitlerows = "$1:$5"
          .firstpagenumber = -4105
          .order = 1
          .zoom = .F.
          .fittopageswide = 1
          .fittopagestall = 30
     ENDWITH
     .range("A6").select()
 
ENDWITH
 
	oexcel.visible = .T.
 
	*-Desconectar
	RELEASE oexcel
	WAIT CLEAR
	USE IN _CurCuenta
 
	= MESSAGEBOX("La hoja fue generada satisfactoriamente.", 0, "")
 
ENDPROC
**
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

Excel intercambia el dia por el mes

Publicado por Pablo RG (1 intervención) el 21/11/2017 21:31:47
José:

Esto te puede servir para fechas cortas, por ejemplo 21/11/2017, cambia la fecha de Excel a formato numérico, te dará el siguiente número 43060.

obj_Excel.Cells(2,1).NumberFormat = '#,##0_ ;-#,##0'

Crea una tablita con los valores del 01/01/1900 al 01/01/2018 como en el siguiente ejemplo.
no fecha
1 01/01/1900
2 02/01/1900
3 03/01/1900
4 04/01/1900
5 05/01/1900
6 06/01/1900
7 07/01/1900
8 08/01/1900
9 09/01/1900
10 10/01/1900
11 11/01/1900
12 12/01/1900
13 13/01/1900
… …
43070 01/12/2017
43071 02/12/2017
43072 03/12/2017
43073 04/12/2017
43074 05/12/2017
43075 06/12/2017
43076 07/12/2017


Solo falta tomar el valor del archivo Excel (Numérico), buscarlo en tu archivo de fechas y traer la fecha del registro.

Además, puedes agregar diferentes campos como MES, MES_Texto, DIA, DIA_Texto, Habil/nhabil

43073 04/12/2017 12 enero 4 miércoles
43074 05/12/2017 12 enero 5 jueves
43075 06/12/2017 12 enero 6 viernes
43076 07/12/2017 12 enero 7 sábado IN
43077 08/12/2017 12 enero 8 domingo IN
43078 09/12/2017 12 enero 9 lunes
43079 10/12/2017 12 enero 10 martes


Espero que te sirva.

Saludos
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