使用apache poi链接到同一工作簿中的不同工作表

时间:2016-02-29 17:26:15

标签: java excel hyperlink apache-poi

我正在使用Apache POI生成包含多个工作表的excel工作簿。我想创建从一个工作表到另一个工作表的超链接。怎么做到这一点?我发现有一些解决方案可用于建立到网站的超链接,甚至是其他excel文件,但不包括同一工作簿中的其他工作表。 Apache POI允许我们这样做吗?

3 个答案:

答案 0 :(得分:3)

是的,Apache POI允许您创建指向同一工作簿中另一个工作表的超链接。根据{{​​3}}:

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);

这将创建一个单元格,其中包含LINK_DOCUMENT类型的超链接,其中包含一个单元格引用的地址,该地址可以位于同一个工作表或另一个工作表中。然后它将单元格样式设置为现有单元格样式(在代码示例中先前创建),以使其看起来像超链接。

答案 1 :(得分:0)

您还可以使用POI链接到另一个工作表中的单元格地址。

将您的链接创建为Hyperlink.LINK_DOCUMENT类型。然后以这种格式发送setHyperlink()一个字符串:

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

这将起作用 - 至少对于XSSF而言。

使用aFile.toURI()。toString()在'#'字符之前构建filepart。不要忘记同时添加'字符(与我的示例完全相同)或者它不管用。

我没有在(非常好的)POI文档中看到这种技术。

答案 2 :(得分:0)

我找到了正确的方法。在poi 3.16上测试并解决了在链接中不允许空间的烦人问题(工作表名称可以有空间)。如果你尝试,你会得到错误 link.setAddress("ExcelWrite.xlsx#'Sheet 1'!A2");

正确的代码:

    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);