NO TITLE
�Por qu� la lectura de una hoja de c�lculo simple lleva tanto tiempo?
Probablemente hayas habilitado el registro (logging). Dicho registro es una herramienta �til para la b�squeda de errores (debug). Tenerlo habilitado reducir� el rendimiento en un factor de al menos 100. El registro es �til para comprender por qu� POI no puede leer alg�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). �Qu� es el "eventmodel" (modelo de evento) de HSSF?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� basado en el modelo de eventos AWT en combinaci�n con SAX. Si necesita acceso de s�lo-lectura a un fichero XML determinado, esta es la mejor manera de hacerlo. �Por qu� no puedo leer el documento que cre� utilizando Star Office 5.1?Star Office 5.1 escribe algunos registros utilizando el viejo est�ndar BIFF. Esto provoca algunos problemas con POI que s�lo soporta BIFF8. �Por qu� recibo una excepci�n cada vez que intento leer mi hoja de c�lculo?Es posible que su hoja de c�lculo contenga alguna caracter�stica que no est� soportada actualmente por HSSF. Por ejemplo - hojas de c�lculo que contengan celdas con formato RTF (rich text) no est�n soportadas actualmente. �Soporta HSSF hojas de c�lculo protegidas?Al proteger una hoja de c�lculo, �sta se cifra. No tocaremos el cifrado, porque no tenemos el suficiente conocimiento legal y no estamos seguros de las implicaciones que conllevar�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�. �C�mo se sabe si un campo contiene una fecha con HSSF?Excel almacena las fechas como n�meros. As� la �nica manera para determinar si una celda est� realmente almacenada como una fecha consiste en mirar su formato. Hay un m�todo de ayuda (helper) en HSSFDateUtil (desde la distribuci�n 1.7.0-dev) que lo comprueba. Gracias a Jason Hoffman por proporcionar la soluci�n. 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; } El problema normalmente se manifiesta como un mont�n de caracteres basura en la pantalla. El problema persiste incluso aunque hayas configurado el tipo mime correcto. La respuesta breve es: no dependas de IE para mostrar un fichero binario. Escribe un documento adjunto como es debido si lo env�as a trav�s de un servlet. Toda versi�n de IE tiene diferentes fallos (bugs) en este sentido. El problema en la mayor�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�n del fichero en la petici�n. As� podr�a a�adir un .xls a su cadena de petici�n. Por ejemplo: http://yourserver.com/myServelet.xls?param1=xx. Esto se consigue f�cilmente a trav�s del mapeo de URL en cualquier contenedor servlet. A veces una petici�n como http://yourserver.com/myServelet?param1=xx&dummy=file.xls tambi�n funciona. 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�a entonces una respuesta http al navegador para que haga una redirecci�n en el lado del cliente a tu fichero temporal. (Si haces una redirecci�n en el lado del servidor utilizando RequestDispatcher, tendr�s que a�adir .xls a la petici�n como se ha mendionado m�s arriba) 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� que si tu proceso generador es pesado, tiene sentido escribir a un fichero temporal, para que peticiones m�ltiples utilicen el fichero est�tico. Nada de esto pertenece a Excel. El mismo problema ocurre cuando intentas general cualquier fichero binario din�micamente a un cliente IE. Por ejemplo, si generas ficheros pdf utilizando FOP, te encontrar�s con los mismos problemas. Quiero dar formato a una celda (Data format of a cell) de una hoja excel como ###,###,###.#### o ###,###,###.0000. �Es posible hacer esto con POI?HSSF no soporta todav�a formatos de datos personalizados, sin embargo, deber�a ser una facilidad razonablemente sencilla de a�adir y aceptaremos gustosos contribuciones en este �rea. Estos son los formatos incluidos que soporta: �C�mo a�ado un borde alrededor de una celda unida (merged)?A�ade celdas vac�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. Intent� escribir valores en celdas as� como cambiar el nombre de la hoja Excel en mi lengua nativa, pero no pude hacerlo. :(Por defecto HSSF utiliza valores de celdas y nombres de hoja en unicode comprimido, asi que para soportar la localizaci�n deber�as utilizar Unicode. Para hacerlo deber�as configurarlo manualmente: // // 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" ); Aseg�rate de que haces la llamada a setEncoding() antes de llamar a setCellValue(), si no, lo que le pases no ser� interpretado correctamente. |