Невозможно экспортировать строку как гиперссылку в файл .xlsx - Java 8 & POI 3.17 - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь создать файл Excel, в котором первая ячейка всегда является гиперссылкой. Я использую Java 8 и POI 3.17 в Spring Boot API. Экспорт в Excel работает нормально, но проблема в том, что первая ячейка теперь пуста. Я не получаю никаких предупреждений, ошибок или чего-то еще. Проблематический c код:

  final XSSFWorkbook wb = exportHelperService.loadWorkbookTemplate(path);
  XSSFHyperlink url_link = wb.getCreationHelper().createHyperlink(HyperlinkType.URL) // definition for Hyperlink


  fillWorkbook(....) {  // here i gonna fill my workbook - everything works fine

    url_link.setAddress("http://www.google.de/");  // definition of url address - checked that its not empty

    exportHelperService.insertHyperlinkValue(url_link, "Cell_1", row);  // calls function that writes into the cell 1 - for all other cells there is NO problem

    // ... code that works fine ...

  }


  public void insertHyperlinkValue(XSSFHyperlink value, String columName, Row row) {
    if (value != null) {
        Cell cell = row.getCell(columnIndexMap.get(columName), CREATE_NULL_AS_BLANK);
        cell.setHyperlink(value); // <--- HERE IS THE PROBLEM
    }
}

Я протестировал функцию insertHyperlinkValue () для печати только строки, и она работала нормально, но для гиперссылки это не работает ... Где моя ложь ? Большое спасибо за каждый ответ !!!

1 Ответ

2 голосов
/ 29 января 2020

Ячейка уже содержит ссылку, у нее просто нет текста / стиля.

XSSFWorkbook wb = new XSSFWorkbook();
XSSFHyperlink link = wb.getCreationHelper().createHyperlink(HyperlinkType.URL);
XSSFCellStyle hlinkstyle = wb.createCellStyle();
XSSFFont hlinkfont = wb.createFont();
hlinkfont.setUnderline(XSSFFont.U_SINGLE);
hlinkfont.setColor(IndexedColors.BLUE.index);
hlinkstyle.setFont(hlinkfont);
link.setAddress("http://www.google.de/");
Sheet s = wb.createSheet();
Row r = s.createRow(0);
Cell c = r.createCell(0);
c.setHyperlink(link);
c.setCellStyle(hlinkstyle);  //<-- make it look like link
c.setCellValue(link.getAddress());  // <-- important
wb.write(new FileOutputStream(new File("D:\\Test\\hyperlink.xlsx")));
wb.close();

Вам просто нужно установить текст и стиль ячейки, и вы подходите для go.

...