FoxPro/Visual FoxPro - Objeto Excel

 
Vista:

Objeto Excel

Publicado por CarlosA (86 intervenciones) el 26/02/2007 22:25:33
Hola... estoy creando una hoja excel desde una aplicacion que tengo en VFP...

necesito hacer lo siguiente...que las columnas se justifiquen automaticamente de acuerdo a los valores en las columnas.. y como hago para ocultar las lineas de division...

estoy usando el objeto Excel.Aplication

oExcel = CreateObject("Excel.Application") &&crea objeto excel
oExcel.Workbooks.Add &&adiciona libro a objeto

pero necesito las propiedades que debo trabajar para desaparecer las lineas de division y justificar el ancho de columna de manera automatica....

gracias

CarlosA
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

RE:Objeto Excel

Publicado por neo (1604 intervenciones) el 26/02/2007 23:44:52
Si te sirve de algo, por ahi Ernesto Hernandez expuso algun codigo que hace lo que necesitas, solo tienes que buscar, usando esta opcion..

Suerte►
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

RE:Objeto Excel

Publicado por CarlosA (86 intervenciones) el 27/02/2007 20:23:02
mmm... lo revise y encontre el link que puso Ernesto, pero la verdad hay formas mas sencillas, ese enlace sirve para manipular EXCEL a traves de la API, pero creo que desde VB... pero es mas sencillo con el objeto excel como lo estoy haciendo... lo unico es que no he encontrado un enlace donde explique las diferentes opciones disponibles... estos son las propiedades que he podido manipular hasta ahora...

oExcel = CreateObject("Excel.Application") &&crea objeto excel
oExcel.Visible = .T. &&muestra objeto
oExcel.Workbooks.Add &&adiciona libro a objeto
oExcel.Cells(1,1).Value ="Prueba" &&forma de rellenar celdas con valores
oexcel.Cells(1,1).Borders.LineStyle=1 &&poner bordes a las celdas (1=linea continua, 2=linea punteada)
oexcel.Cells(1,1).Borders.LineStyle=0 &&quitar linea
oExcel.Cells(1,1).Font.Bold = .T. &&poner letra en negrilla
oexcel.Cells(1,1).Clear limpiar valor celda
oExcel.Workbooks.Close && Cierra el libro de excel
oExcel.Quit && Cierra Microsoft Excel
Release oExcel && Libera de la memoria el Objeto COM EXCEL
oexcel.Cells(1,2).Borders.Weight=4 && borde grueso

he buscado en internet y he encontrado cosas interesantes como crear graficos de barras y pastel en excel desde VFP... como seleccionar un rango de celdas y darle formato a ese rango...

pero no he encontrado como autoajustar el ancho de las columnas o como combinar y centrar celdas.... si alguien ha encontrado algo mas seria bueno tener la informacion...

gracias

CarlosA
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

RE:Objeto Excel

Publicado por CarlosA (86 intervenciones) el 27/02/2007 20:23:43
mmm... lo revise y encontre el link que puso Ernesto, pero la verdad hay formas mas sencillas, ese enlace sirve para manipular EXCEL a traves de la API, pero creo que desde VB... pero es mas sencillo con el objeto excel como lo estoy haciendo... lo unico es que no he encontrado un enlace donde explique las diferentes opciones disponibles... estos son las propiedades que he podido manipular hasta ahora...

oExcel = CreateObject("Excel.Application") &&crea objeto excel
oExcel.Visible = .T. &&muestra objeto
oExcel.Workbooks.Add &&adiciona libro a objeto
oExcel.Cells(1,1).Value ="Prueba" &&forma de rellenar celdas con valores
oexcel.Cells(1,1).Borders.LineStyle=1 &&poner bordes a las celdas (1=linea continua, 2=linea punteada)
oexcel.Cells(1,1).Borders.LineStyle=0 &&quitar linea
oExcel.Cells(1,1).Font.Bold = .T. &&poner letra en negrilla
oexcel.Cells(1,1).Clear limpiar valor celda
oExcel.Workbooks.Close && Cierra el libro de excel
oExcel.Quit && Cierra Microsoft Excel
Release oExcel && Libera de la memoria el Objeto COM EXCEL
oexcel.Cells(1,2).Borders.Weight=4 && borde grueso

he buscado en internet y he encontrado cosas interesantes como crear graficos de barras y pastel en excel desde VFP... como seleccionar un rango de celdas y darle formato a ese rango...

pero no he encontrado como autoajustar el ancho de las columnas o como combinar y centrar celdas.... si alguien ha encontrado algo mas seria bueno tener la informacion...

gracias

CarlosA
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

RE:Objeto Excel

Publicado por Plusware (1 intervención) el 28/02/2007 14:21:06
Gracias por las orientaciones me serviran para unos procesos que tengo con Excel desde VFP, por casualidad alguien conoce como agregar otra hoja al objeto excel y comenzar el llenado de datos en la segunda hoja, bajo una condicion definida en el codigo de VFP?

no encontre fue como alinear el texto!
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

RE:Objeto Excel

Publicado por CarlosA (86 intervenciones) el 28/02/2007 14:50:43
Agregar libros y hojas

m.oExcel = CREATEOBJECT("Excel.Application")
WITH m.oExcel
&&Abrimos un libro nuevo
.Workbooks.ADD
&&Agregamos hojas (en caso necesario)
.Sheets.ADD

He encontrado estos enlaces muy buenos acerca de generar hojas excel desde VFP

http://www.foxite.com/articles/read.aspx?id=19&document=how-to-call-excel-worksheet-functions-from-vfp
El enlace anterior trabaja con base en una DLL creada por el autor... pero es muy completo y tiene la DLL para VFP6, VFP7, VFP8... incluye ayuda con la sintaxis de todos los comandos.. excelente

http://www.portalfox.com/index.php?name=News&file=article&sid=230&mode=nested&order=0&thold=0

GRAFICOS!!

http://www.fpress.com/revista/Num9911/graficos.htm
http://www.todoexpertos.com/herramientas/leermsgpublico.aspx?idproceso=603029
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

RE:Objeto Excel

Publicado por maxi (2 intervenciones) el 11/12/2012 19:53:28
Estimados,

Buenas tardes, lo que necesito es realizar es lo siguiente:
al objeo excel creado necesito agregarle los regstros de manera masiva, ya que realizando una iteracion para inserta registro por registro no es muy eficiente.
Alguien me podría pasar la lógica a utilizar para rezar esto

Muchas gracisa
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
Imágen de perfil de Elides Paredes

RE:Objeto Excel

Publicado por Elides Paredes (1 intervención) el 26/03/2013 19:38:52
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
206
207
208
209
210
211
212
* Defino las Variables locales a utilizar
* =======================================
 
	LOCAL i,j,TrendFunc,xlsheet,XLApp,tmpsheet
 
* Crear la tabla que se va a presentar
* ======================================
 
 
SELECT Detalles_compras.codigo,;
       Detalles_compras.cantidad,;
       Detalles_compras.descripcio,;
       Detalles_compras.precio_uni,;
       Detalles_compras.precio,;
       Detalles_compras.impuesto,;
       (Detalles_compras.precio * Detalles_compras.cantidad+Detalles_compras.impuesto) as Sub_total,;
	   Detalles_compras.tipo_repue;
 FROM ;
     C:\PROYECTO\TABLAS\DETALLES_COMPRAS.DBF;
  WHERE  Detalles_compras.num_orden = (ThisFormset.Form1.Pageframe1.page1.NUM_ORDEN1.Value)INTO CURSOR orden_compra
 
SELECT orden_compra
*!*	BROWSE
numReg=RECCOUNT()
 
 
IF numReg > 0 && Si tiene registros
 
	* Notas: Las variables definidas con #DEFINE crean constantes de tiempo de compilación en los programas
	* Esas variables las utilizo para El programa Excel.
 
	* Encabezados de Celdas en Excel
	* ==============================
 
	* Encabezados de la tabla
 
			#DEFINE codigo           "Código Repuesto"
			#DEFINE cantidad         "Cantidad"
			#DEFINE descripcion      "Descripción"
			#DEFINE PrecionUnitario  "Precio Unitario"
			#DEFINE Precio           "Precio"			
			#DEFINE Impuesto1	     "Impuesto"
			#DEFINE sub_total        "Sub total"
			#DEFINE tipo             "Tipo de Repuesto"
 
 
 
	* Aqui comienza a Meter la información en Excel
	* =============================================
 
	* Crea una hoja
	* ===============
 
			tmpsheet = GetObject('','excel.sheet')
			XLApp = tmpsheet.application
			*XLApp.Visible = .T.
			XLApp.WorkBooks.Add()
			XLSheet = XLApp.ActiveSheet
 
	* Crea el encabezado de los campos
	*=================================
 
			XLSheet.Cells(1,1).Value = codigo
			XLSheet.Cells(1,2).Value = cantidad
			XLSheet.Cells(1,3).Value = descripcion
			XLSheet.Cells(1,4).Value = PrecionUnitario
			XLSheet.Cells(1,5).Value = Precio
			XLSheet.Cells(1,6).Value = Impuesto1
			XLSheet.Cells(1,7).Value = sub_total
			XLSheet.Cells(1,8).Value = tipo
 
*-----------------------------------
*-Insertando Encabezados Generales*
	* XLSheet.Range("A1:A8").Select  && Funciona bien, selecciona las celdas desde A1 a A8
	XLSheet.Range("A1:H1").FONT.BOLD=.T.
 
 
* 1 Borde Izquierdo
* 2 Borde derecho
* 3 Nada
* 4 Inferior
* 5 Borde inclinado así \
* 6 Borde Inclinado asi /
* 7 Nada
* 8 Nada
* 9 Igual al 4 inferior
* 10 Nada
*
	XLSheet.Range("A1:H1").BORDERS(4).LineStyle=3
	XLSheet.Range("A1:H1").BORDERS(4).Weight=3
	XLSheet.Range("A1:H1").BORDERS(4).ColorIndex=3
	XLSheet.Range("A1:H1").font.NAME="Times"&& "Arial" &&
	XLSheet.Range("A1:H1").font.SIZE="12"
 
 
 
 
 
 
 
 
			* DO (_GENXTAB) WITH 'fac_pendientes'
 
			SELECT *  from orden_compra INTO ARRAY Arreglo
 
 
	* Ahora mete el contenido del arreglo en la celda
	* ===============================================
				FOR I = 1 TO numReg  && I es el número de celda, Número de registros del Cursor
				FOR J = 1 to 8 && To número de campos del cursor
*!*						IF ISNULL (Arreglo(i,j)) THEN
*!*							XLSheet.Cells(i+1,j).Value =0
*!*						ELSE
						XLSheet.Cells(i+1,j).Value = Arreglo(i,j)
*!*						ENDIF
 
				ENDFOR
			ENDFOR
*!*		 XLSheet.Range("A1:D1").Select && Funciona bien, selecciona las celdas en el rango
*!*			XLSheet.Cells(1,7).select && = tipo
 
 
 
*-----------------------------------
*-Definiendo Ancho de las columnas-*  Sólo después de haber cargado los datos
	XLSheet.Columns("A:A").ColumnWidth = 17    && Código del Repuesto
	XLSheet.Columns("B:B").ColumnWidth = 9 && Cantidad
	XLSheet.Columns("C:C").ColumnWidth = 35.57 && Descripción
	XLSheet.Columns("D:D").ColumnWidth = 16.86 && Precio Unitario
	XLSheet.Columns("E:E").ColumnWidth = 7.57  && Precio
	XLSheet.Columns("F:F").ColumnWidth = 10.29 && Impuesto
	XLSheet.Columns("G:G").ColumnWidth = 10.29 && Sub total
	XLSheet.Columns("H:H").ColumnWidth = 19.29 && Tipo de Repuesto
 
*	XLSheet.Columns("E:E").NUMBERFORMAT="$ #,##0.00" 	&& Funciona bien..
* NumberFormat = "#,##0.00"
* NumberFormat = "0.00%"
 
 
XLSheet.Range("A1:D1").Font.HorizontalAlignment=2
 
 
 
*!*			CASE UPPER(lcAlinea)="IZQUIERDA"
*!*				.Selection.HorizontalAlignment = xlHAlignLeft
*!*			CASE UPPER(lcAlinea)="DERECHA"
*!*				.Selection.HorizontalAlignment = xlHAlignRight
*!*			CASE UPPER(lcAlinea)="CENTRO"
*!*				.Selection.HorizontalAlignment = xlHAlignCenter
*!*			otherwise
*!*				.Selection.HorizontalAlignment = xlHAlignGeneral
*!*		endcase
 
* Nombre del Archivo
* ==================
 
 
 
	 cNombre="C:\proyecto\excel\"+"Orden de Compra " +;
          ALLTRIM(str(ThisFormset.Form1.Pageframe1.page1.NUM_ORDEN1.Value))+" "+;
          ALLTRIM(ThisFormset.Form1.Pageframe1.page1.PROVEEDOR1.value)+".XLS"
 
 
 
 
 
 
 
		XLSheet = XLApp.ActiveSheet.SaveAs (cNombre)
 
 
 
*!*				IF FILE (cNombre)  && Así funciona bien.
*!*					WAIT "el nombre existe, inserto la yes" WINDOW AT 25,35 TIMEOUT 2
*!*					KEYBOARD '{s}'
 
*!*				ELSE
*!*					WAIT "el nombre NO EXISTE " WINDOW AT 25,35 TIMEOUT 2
*!*				ENDIF
 
		FOR I = 1 TO numReg  && I es el número de celda, Número de registros del Cursor
 
		    IF (Arreglo(i,4))=0 THEN
				cMensaje="Cuidado no se puede emitir una orden"+CHR(13)+ alltrim(Arreglo(i,3))+CHR(13)+"No Tiene precio"
				MESSAGEBOX(cMensaje,0+64,"Cuidado")
			ENDIF
 
		ENDFOR
 
 
 
 		XLApp.Visible = .T.
 
* El botón aparece con una imagen tachada o sin tachar, dependiendo si esta en modo de edición o en
* modo de consulta, no puede enviar un correo en modo de edición se debe esperar que haya editado todo.
* =====================================================================================================
 
 
 
ELSE && Si tiene registros
 
	  cMensaje="Aún no ha seleccionado los repuestos"+CHR(13)+ "de la orden de compra, No se creará archivo"
	  MESSAGEBOX(cMensaje,0+64,"Sin información")
 
ENDIF
 
 
 
 
* cMensaje= Recuerde que una orden de compra es un compromiso de pago, por tal motivo es necesario que indique
* el valor de todos los repuestos. En esta orden aparecen repuestos sin precio. No se enviará una orden o compromiso
* de pago hasta que elimine los repuestos sin precio o hasta que le indique los precios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:Objeto Excel

Publicado por Luis Arroyo (1 intervención) el 10/08/2017 20:07:21
Me gusto el código, sobre todo lo limpio y fácil de acomodar. Muy Buen aporte..
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