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