es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los enlaces de Excel redirigen a la página de inicio de sesión, pero cuando se pega el enlace en el navegador, la página real se carga.

Estoy utilizando apache-poi:3.9 para escribir el archivo de Excel. En una columna, estoy escribiendo un hipervínculo como se muestra a continuación.

final CellStyle hlink_style = wb.createCellStyle();
final Font hlink_font = wb.createFont();
hlink_font.setUnderline(Font.U_SINGLE);
hlink_font.setColor(IndexedColors.DARK_BLUE.getIndex());
hlink_style.setFont(hlink_font);

// valor de ejemplo
String value = "<a href=\"https://localhost/user/UserDetailAction.do?userid=213&depid=453\"></a>";
final Document document = Jsoup.parse((String) value);
final String id= document.select("a").first().text();
final String url = document.select("a").first().attr("href");


final Hyperlink hyperlink = wb.getCreationHelper().createHyperlink(1);
// Intenté con y sin codificación
hyperlink.setAddress(URLEncoder.encode(url, StandardCharsets.UTF_8.toString()));
cell.setHyperlink(hyperlink);
cell.setCellStyle(hlink_style);
cell.setCellValue(id);

Está escribiendo el id como un hipervínculo en Excel (xlsx). Pero cuando hago clic en él, me redirecciona a la página de inicio de sesión (incluso cuando la sesión está activa).

Pero cuando copio el hipervínculo de Excel y lo pego en el navegador, funciona bien.

¿Cómo puedo solucionarlo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema está ocurriendo porque la URL está siendo codificada antes de ser establecida como dirección de hipervínculo. En lugar de codificar la URL, utilízala directamente reemplazando la siguiente línea:

    hyperlink.setAddress(URLEncoder.encode(url, StandardCharsets.UTF_8.toString()));
    

    con

    hyperlink.setAddress(url);
    

    Esto debería resolver el problema y el hipervínculo debería funcionar como se espera.

Comments are closed.