2003-04-23 20:53:41 -04:00
|
|
|
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
2004-02-28 07:56:00 -05:00
|
|
|
|
<!-- Copyright (C) 2004 The Apache Software Foundation. All rights reserved. -->
|
2003-04-23 20:53:41 -04:00
|
|
|
|
<!DOCTYPE faqs PUBLIC "-//APACHE//DTD FAQ V1.1//EN" "../../dtd/faq-v11.dtd">
|
|
|
|
|
|
|
|
|
|
<faqs title="Preguntas M<>s Frecuentes (FAQ)">
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
<20>Por qu<71> la lectura de una hoja de c<>lculo simple lleva tanto tiempo?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>
|
|
|
|
|
Probablemente hayas habilitado el registro (logging). Dicho registro es
|
|
|
|
|
una herramienta <20>til para la b<>squeda de errores (debug). Tenerlo habilitado
|
|
|
|
|
reducir<69> el rendimiento en un factor de al menos 100. El registro es <20>til para
|
|
|
|
|
comprender por qu<71> POI no puede leer alg<6C>n fichero o para el propio desarrollo
|
|
|
|
|
de POI.
|
|
|
|
|
Los errores importantes se lanzan como excepciones, lo cual significa que
|
|
|
|
|
probablemente no necesites el registro (log).
|
|
|
|
|
</p>
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
<20>Qu<51> es el "eventmodel" (modelo de evento) de HSSF?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p> El paquete "eventmodel" de HSSF es un nuevo API para la lectura m<>s eficiente de ficheros
|
|
|
|
|
XML. Requiere mayor conocimiento por parte del usuario, pero reduce el consumo de memoria a
|
|
|
|
|
una d<>cima parte. Est<73> basado en el modelo de eventos AWT en combinaci<63>n con SAX. Si necesita
|
|
|
|
|
acceso de s<>lo-lectura a un fichero XML determinado, esta es la mejor manera de hacerlo.</p>
|
|
|
|
|
</answer>
|
|
|
|
|
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
<20>Por qu<71> no puedo leer el documento que cre<72> utilizando Star Office 5.1?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>Star Office 5.1 escribe algunos registros utilizando el viejo est<73>ndar BIFF.
|
|
|
|
|
Esto provoca algunos problemas con POI que s<>lo soporta BIFF8.</p>
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
<20>Por qu<71> recibo una excepci<63>n cada vez que intento leer mi hoja de c<>lculo?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>Es posible que su hoja de c<>lculo contenga alguna caracter<65>stica que no est<73>
|
|
|
|
|
soportada actualmente por HSSF. Por ejemplo - hojas de c<>lculo que contengan
|
|
|
|
|
celdas con formato RTF (rich text) no est<73>n soportadas actualmente.</p>
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
<20>Soporta HSSF hojas de c<>lculo protegidas?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>Al proteger una hoja de c<>lculo, <20>sta se cifra. No tocaremos el cifrado, porque no
|
|
|
|
|
tenemos el suficiente conocimiento legal y no estamos seguros de las implicaciones que
|
|
|
|
|
conllevar<61>a el intentar implementar esto. Si desea intentarlo, es libre de hacerlo y
|
|
|
|
|
de a<>adirlo como un m<>dulo enchufable (plugin). Sin embargo, no lo guardaremos aqu<71>.</p>
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
<20>C<EFBFBD>mo se sabe si un campo contiene una fecha con HSSF?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>Excel almacena las fechas como n<>meros. As<41> la <20>nica manera para determinar
|
|
|
|
|
si una celda est<73> realmente almacenada como una fecha consiste en mirar su formato.
|
|
|
|
|
Hay un m<>todo de ayuda (helper) en HSSFDateUtil (desde la distribuci<63>n 1.7.0-dev)
|
|
|
|
|
que lo comprueba. Gracias a Jason Hoffman por proporcionar la soluci<63>n.</p>
|
|
|
|
|
<source>
|
|
|
|
|
|
|
|
|
|
case HSSFCell.CELL_TYPE_NUMERIC:
|
|
|
|
|
double d = cell.getNumericCellValue();
|
|
|
|
|
// test if a date!
|
|
|
|
|
if (HSSFDateUtil.isCellDateFormatted(cell)) {
|
|
|
|
|
// format in form of M/D/YY
|
|
|
|
|
cal.setTime(HSSFDateUtil.getJavaDate(d));
|
|
|
|
|
cellText =
|
|
|
|
|
(String.valueOf(cal.get(Calendar.YEAR))).substring(2);
|
|
|
|
|
cellText = cal.get(Calendar.MONTH)+1 + "/" +
|
|
|
|
|
cal.get(Calendar.DAY_OF_MONTH) + "/" +
|
|
|
|
|
cellText;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
</source>
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
Estoy intentando ver un fichero XLS enviado como flujo (stream) desde un servlet y tengo
|
|
|
|
|
complicaciones. <20>Cu<43>l es el problema?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>
|
|
|
|
|
El problema normalmente se manifiesta como un mont<6E>n de caracteres basura
|
|
|
|
|
en la pantalla. El problema persiste incluso aunque hayas configurado el tipo mime
|
|
|
|
|
correcto.
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
La respuesta breve es: no dependas de IE para mostrar un fichero binario.
|
|
|
|
|
Escribe un documento adjunto como es debido si lo env<6E>as a trav<61>s de un servlet.
|
|
|
|
|
Toda versi<73>n de IE tiene diferentes fallos (bugs) en este sentido.
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
El problema en la mayor<6F>a de las versiones de IE reside en que no utiliza el tipo mime
|
|
|
|
|
de la respuesta HTTP para determinar el tipo de fichero; en su lugar utiliza la extensi<73>n
|
|
|
|
|
del fichero en la petici<63>n. As<41> podr<64>a a<>adir un <strong>.xls</strong> a su cadena de petici<63>n.
|
|
|
|
|
Por ejemplo: <em>http://yourserver.com/myServelet.xls?param1=xx</em>. Esto se consigue
|
|
|
|
|
f<>cilmente a trav<61>s del mapeo de URL en cualquier contenedor servlet. A veces una
|
|
|
|
|
petici<63>n como
|
|
|
|
|
<em>http://yourserver.com/myServelet?param1=xx&dummy=file.xls</em>
|
|
|
|
|
tambi<62>n funciona.
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
Para garantizar la correcta apertura del fichero en Excel desde IE, escribe
|
|
|
|
|
tu fichero a un fichero temporal bajo su raiz web desde tu servlet. Env<6E>a entonces
|
|
|
|
|
una respuesta http al navegador para que haga una redirecci<63>n en el lado del cliente
|
|
|
|
|
a tu fichero temporal. (Si haces una redirecci<63>n en el lado del servidor utilizando
|
|
|
|
|
RequestDispatcher, tendr<64>s que a<>adir .xls a la petici<63>n como se ha mendionado m<>s
|
|
|
|
|
arriba)
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
Date cuenta de que cuando pides un documento que se abre con un manejador externo,
|
|
|
|
|
IE a veces realiza dos peticiones al servidor web. As<41> que si tu proceso generador
|
|
|
|
|
es pesado, tiene sentido escribir a un fichero temporal, para que peticiones
|
|
|
|
|
m<>ltiples utilicen el fichero est<73>tico.
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
Nada de esto pertenece a Excel. El mismo problema ocurre cuando intentas general
|
|
|
|
|
cualquier fichero binario din<69>micamente a un cliente IE. Por ejemplo, si generas
|
|
|
|
|
ficheros pdf utilizando
|
|
|
|
|
<link href="http://xml.apache.org/fop">FOP</link>,
|
|
|
|
|
te encontrar<61>s con los mismos problemas.
|
|
|
|
|
</p>
|
|
|
|
|
<!-- Gracias a Avik por la respuesta -->
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
Quiero dar formato a una celda (Data format of a cell) de una hoja excel como
|
|
|
|
|
###,###,###.#### o ###,###,###.0000. <20>Es posible hacer esto con POI?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>
|
|
|
|
|
HSSF no soporta todav<61>a formatos de datos personalizados, sin embargo,
|
|
|
|
|
deber<65>a ser una facilidad razonablemente sencilla de a<>adir y aceptaremos
|
|
|
|
|
gustosos contribuciones en este <20>rea.
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
Estos son los formatos incluidos que soporta:
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
<link href="http://jakarta.apache.org/poi/javadocs/javasrc/org/apache/poi/hssf/usermodel/HSSFDataFormat_java.html#HSSFDataFormat">http://jakarta.apache.org/poi/javadocs/javasrc/org/apache/poi/hssf/usermodel/HSSFDataFormat_java.html#HSSFDataFormat</link>
|
|
|
|
|
</p>
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
<20>C<EFBFBD>mo a<>ado un borde alrededor de una celda unida (merged)?
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>
|
|
|
|
|
A<>ade celdas vac<61>as alrededor de donde las celdas hubieran estado normalmente y
|
|
|
|
|
configura los bordes individualmente para cada celda.
|
|
|
|
|
Probablemente mejoraremos HSSF en el futuro para facilitar este proceso.
|
|
|
|
|
</p>
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
<faq>
|
|
|
|
|
<question>
|
|
|
|
|
Intent<6E> escribir valores en celdas as<61> como cambiar el nombre de la hoja Excel
|
|
|
|
|
en mi lengua nativa, pero no pude hacerlo. :(
|
|
|
|
|
</question>
|
|
|
|
|
<answer>
|
|
|
|
|
<p>
|
|
|
|
|
Por defecto HSSF utiliza valores de celdas y nombres de hoja en unicode comprimido,
|
|
|
|
|
asi que para soportar la localizaci<63>n deber<65>as utilizar Unicode.
|
|
|
|
|
Para hacerlo deber<65>as configurarlo manualmente:
|
|
|
|
|
</p>
|
|
|
|
|
<source>
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// para el nombre de la hoja
|
|
|
|
|
//
|
|
|
|
|
HSSFWorkbook wb = new HSSFWorkbook();
|
|
|
|
|
HSSFSheet s = wb.createSheet();
|
|
|
|
|
wb.setSheetName( 0, "SomeUnicodeName", HSSFWorkbook.ENCODING_UTF_16 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// para el valor de la celda
|
|
|
|
|
//
|
|
|
|
|
HSSFRow r = s.createRow( 0 );
|
|
|
|
|
HSSFCell c = r.createCell( (short)0 );
|
|
|
|
|
c.setCellType( HSSFCell.CELL_TYPE_STRING );
|
|
|
|
|
c.setEncoding( HSSFCell.ENCODING_UTF_16 );
|
|
|
|
|
c.setCellValue( "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F" );
|
|
|
|
|
|
|
|
|
|
</source>
|
|
|
|
|
<p>
|
|
|
|
|
Aseg<65>rate de que haces la llamada a setEncoding() antes de llamar a setCellValue(),
|
|
|
|
|
si no, lo que le pases no ser<65> interpretado correctamente.
|
|
|
|
|
</p>
|
|
|
|
|
</answer>
|
|
|
|
|
</faq>
|
|
|
|
|
</faqs>
|