w3school ventana tutorial tipos paginas misma hipervinculos hipervinculo externos ejemplos con codigo atributos abrir java excel hyperlink apache-poi

java - ventana - tipos de hipervinculos html



hipervínculo a una hoja diferente dentro del mismo libro de trabajo usando apache poi (3)

Estoy usando Apache POI para generar un libro de Excel que contenga varias hojas. Quiero crear un hipervínculo de una hoja a otra. ¿Cómo lograr esto? Existen soluciones que encontré para establecer hipervínculos a sitios web, incluso otros archivos de Excel, pero no a otras hojas dentro del mismo libro de trabajo. ¿El POI de Apache nos permite hacer esto?


Sí, Apache POI le permite crear un hipervínculo a otra hoja en el mismo libro de trabajo. De acuerdo con la Guía rápida de POI de Apache :

cell = sheet.createRow(3).createCell((short)0); cell.setCellValue("Worksheet Link"); Hyperlink link2 = createHelper.createHyperlink(Hyperlink.LINK_DOCUMENT); link2.setAddress("''Target Sheet''!A1"); cell.setHyperlink(link2); cell.setCellStyle(hlink_style);

Esto crea una celda con un hipervínculo de tipo LINK_DOCUMENT , con una dirección de referencia de celda, que puede estar en la misma hoja u otra hoja. Luego establece el estilo de celda en un estilo de celda existente (creado anteriormente en el ejemplo de código), de modo que se ve como un hipervínculo.


También puede vincular a una dirección de celda en otra hoja de trabajo usando POI.

Crea tu enlace como tipo Hyperlink.LINK_DOCUMENT. A continuación, envíe setHyperlink () una cadena en este formato:

file: / E: /PROJECTS/SomePrj/ExcelFileName.xlsx#''ExcelSheetName ''! B5

eso funcionará, al menos para XSSF.

Utilice aFile.toURI (). ToString () para compilar el archivo antes del carácter ''#''. ¡No olvides agregar tanto # , '' y ! caracteres ( exactamente como en mi ejemplo) o no funcionará.

No veo esta técnica demostrada en la (por lo demás muy buena) documentación de POI.


Encontré el camino correcto. Probado en poi 3.16 y resuelto el problema molesto de no permitir espacio en el enlace (el nombre de la hoja puede tener espacio). obtendrá un error si prueba link.setAddress("ExcelWrite.xlsx#''Sheet 1''!A2");

CÓDIGO CORRECTO:

cell = sheet.createRow(1).createCell(0); cell.setCellValue("File Link"); XSSFHyperlink link = (XSSFHyperlink) createHelper.createHyperlink(HyperlinkType.FILE); link.setAddress("ExcelWrite.xlsx"); link.setLocation("''Sheet 1''!A2"); cell.setHyperlink(link); cell.setCellStyle(hlink_style);