Ajustar texto en excel mediante foxpro

Espero me puedan ayudar. He hecho un pequeño sistema para controlar los reportes de usuarios, algo así como un helpdesk. Un módulo me permite saber cuantos reportes se atendieron en un rango de tiempo, la idea es de este módulo generar reportes exportándolos a excel. Pues bien, esa parte ya la tengo, creando un objeto y usand el cursor de la consulta como fuente, lo que quiero es dar formato a determinadas columnas, es decir, lo que quiero es que se ajuste al texto para que me puestre varias líneas en una fila, ya que uno de los campos puede medir hasta 254 caracteres y si ajusto el tamaño de las columnas en automático quedará demasiado grande.
Espero me haya explicado bien y me pueden orientar de la sintaxis, porque a decir verdad no la se, debe ser algo como:
XLSheet.COLUMNS(x).Alignment=ClaveParaAjustarAlTexto

6 Respuestas

Respuesta
1
Te recomiendo que grabes una macro con las características de formato que deseas en las celdas y coloques ese código en tu aplicación.
Muchas gracias por la ayuda, aunque ya conseguí la sintaxis que hace lo que quería... sólo necesitaba XLSheet. Column("H:H"). WrapText=.t.
Gracias de nuevo y que tengas buen inicio de año. Saludos.
Respuesta
1
Para los campos grandes, en tu ejemplo 256c y en la hoja 60c el modo de ajustar el texto es WrapText=.T.
oHoja.Columns("H:H").ColumnWidth=60
oHoja.Columns("H:H").WrapText=.T.
OHoja es el nombre que le asigno al objeto excel en tu caso me parece que es XLSheet.
Muchésimas gracias, lo probaré en cuanto regrese a la oficina, confío en que funcionará. Saludos y feliz año para ti también, espero que la cuesta de Enero no sea tan larga y que te vaya muy bien en el año :). Hasta pronto.
Respuesta
1
He hecho una función específicamente que le envío nada más el alias de mi tabla o cursor y el lo vuelca a excel, poniendo formato a los títulos, ajustando el tamaño entre algunas cositas, la función es muy fácil de usar, se llama xExcel() y le envías dos parámetros, primero el alias de tu cursor y luego el titulo de tu informe, así
=xExcel("Clientes","Listado General de Clientes")
La función te pego aquí su código fuente.
procedure xExcel
lparameter xAlias,xTitulo
*Crea una planilla de calculos de Excel con la tabla enviada.
*Parametros : xAlias -> alias a detallar
* : xTitulo -> titulo del informe
*Autor : Pedro David Ovando
*Empresa : Mercosoft
*----------------------------------------------------------------------------------------*
#DEFINE APPSHOW_WORDUS_LOC "appshow"
#DEFINE FILENEW_WORDUS_LOC "filenewdefault"
#DEFINE INSERT_WORDUS_LOC 'insert("Este es su gráfico!")'
#DEFINE EDITPASTESPECIAL_WORDUS_LOC "editpastespecial(,,,,'PICT')"
#DEFINE OBJECT_TYPE "OBJECT"
APPSHOW_WORDUS =APPSHOW_WORDUS_LOC
FILENEW_WORDUS =FILENEW_WORDUS_LOC
INSERT_WORDUS =INSERT_WORDUS_LOC
EDITPASTESPECIAL_WORDUS =EDITPASTESPECIAL_WORDUS_LOC
PUBLIC ObjWDdoc
wait wind "Creando hoja de cálculo de Excel...." nowait
xAliass = alias()
objXLsheet=CreateObject("Excel.Sheet")
objXLsheet.application.visible=.T.
IF UPPER(objXLsheet.Name)=OBJECT_TYPE
lHasExcel97 = .T.
objXLsheet = objXLsheet.Sheets[1]
ELSE
lHasExcel97 = .F.
ENDIF
Wait wind "Poniendo información de la consulta en la hoja de cálculo..." nowait
*** Titulo cabecera
objXLsheet.Cells(1,1).Value = xTitulo
xRango = "xRango = ASC('A')+"+"fcount('"+xAlias+"')"
&xRango
xRango = "A1:"+alltr(chr(xRango))+"1"
objXLsheet.RANGE(xRango).Merge
for c=1 to fcount(xAlias)
objXLsheet.Cells(2,c).Value = field(c)
xDato=FIELD(c)
xDato=&xDato
if type(field(c))='C'
objXLsheet.Columns(CHR(64+C)).ColumnWidth = LEN(xDato)
else
objXLsheet.Columns(CHR(64+C)).ColumnWidth = 15
endif
endfor
xRango = "xRango = ASC('A')+"+"fcount('"+xAlias+"')"
&xRango
xRango = "A2:"+alltr(chr(xRango))+"2"
objXLsheet.Range(xRango).Interior.Color = RGB(220,220,220) && RGB(192,192,192) && Light Gray
k=2
sele (xAlias)
do while !eof()
k=k+1
for c=1 to fcount(xAlias)
xDato=FIELD(c)
xDato=&xDato
if type('xDato')='C'
objXLsheet.Cells(k,c).Value = "'"+xDato
else
if type('xDato')='D'
objXLsheet.Cells(k,c).Value = "'"+dtoc(xDato)
else
objXLsheet.Cells(k,c).Value = xDato
Endif
Endif
Endfor
Skip
Enddo
if !empty(xAliass)
Se le (xAliass)
Endif
Messagebox('Proceso Concluido, guarde una copia de su hoja de Cálculo ANTES de presionar Aceptar', 55, xSistema)
*------------------------------------------------------------------------------------------------------------*
Fíjate que utilizo columndwidth para ajustar el tamaño de acuerdo al ancho del campo, recuerda que debes crear un programa .prg para que te funcione.
Muchísimas gracias por tu ayuda y el código fuente que me hiciste el favor de enviarme, la verdad ese procedimiento ya lo tenía, lo único que necesitaba era saber como hacer para que una columna no se autoajustara, sino que tuviera un anchofijo, pero que todo el texto se pudiera leer, como se hace cuando en las opciones de formato de columna se logra cuando de selecciona la opción "Ajustar Texto". Pero el experto net45 me dio la sintaxis que buscaba:
XLSheet.Columns("G:G").ColumnWidth=60 (determinar el ancho deseado de la columna)
XLSheet.Columns("G:G").WrapText=.T. (el texto se ajuste al ancho de la columna)
Gracias por la ayuda y disculpa las molestias... aunque seguramente seguiré necesitando ayuda :). Cuídate y saludos.
Respuesta
1
Feliz año nuevo... utiliza la siguiente linea de código para que tus columnas se autoajusten:
XLSheet. Columns(). AutoFit
Ojala sea de ayuda
Muchas gracias por tu pronta respuesta, pero como dije algunos de los campos puede llegar a tener un ancho de hasta 254 caracteres y si las columnas se autoajustan quedarían demasiado grande. Lo que quiero es que el texto se ajuste al ancho de la columna, que sea la fila la que se autoajuste, en excel manualmente se hace seleccionado las celdas o la columna completa, abriendo el formato de celdas y en la pestaña Alinear se palomea la opción "Ajustar texto", eso es lo que deseo hacer.
Gracias de antemano.
Lo que entonces puedes hacer es sacar el numero de caracteres que tiene tu campo y con :
XLSheet.Rows(4).RowHeight='minrodecaracteres' **tipo numerico
Ajustar el tamaño de la fila
Ojala te sirva
Respuesta
1
- 4108 =este valor permite centrar el texto
Respuesta
Lo siento

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas