我正在使用Apache POI生成包含多个工作表的excel工作簿 . 我想创建从一个工作表到另一个工作表的超链接 . 怎么做到这一点?我发现有一些解决方案可用于 Build 到网站的超链接,甚至是其他excel文件,但不包括同一工作簿中的其他工作表 . Apache POI允许我们这样做吗?
是的,Apache POI允许您创建指向同一工作簿中另一个工作表的超链接 . 根据Apache POI Quick Guide:
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 类型的超链接,其中包含单元格引用的地址,该单元格可以位于同一工作表或另一个工作表中 . 然后它将单元格样式设置为现有单元格样式(在代码示例中先前创建),以使其看起来像超链接 .
LINK_DOCUMENT
您还可以使用POI链接到 another 工作表中的单元格地址 .
将您的链接创建为Hyperlink.LINK_DOCUMENT类型 . 然后以这种格式发送setHyperlink()一个字符串:
file:/E:/PROJECTS/SomePrj/ExcelFileName.xlsx#'ExcelSheetName'!B5
这将起作用 - 至少对于XSSF来说 .
使用aFile.toURI() . toString()在'#'字符之前构建filepart . 不要忘记添加 # , ' 和 ! 字符(与我的示例完全相同),否则它将无效 .
我没有在(其他非常好的)POI文档中看到这种技术 .
我找到了正确的方法 . 在poi 3.16上测试并解决了在链接中不允许空间的烦人问题(工作表名称可以有空间) . 如果您尝试 link.setAddress("ExcelWrite.xlsx#'Sheet 1'!A2"); ,您将收到错误
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);
3 回答
是的,Apache POI允许您创建指向同一工作簿中另一个工作表的超链接 . 根据Apache POI Quick Guide:
这将创建一个单元格,其中包含
LINK_DOCUMENT
类型的超链接,其中包含单元格引用的地址,该单元格可以位于同一工作表或另一个工作表中 . 然后它将单元格样式设置为现有单元格样式(在代码示例中先前创建),以使其看起来像超链接 .您还可以使用POI链接到 another 工作表中的单元格地址 .
将您的链接创建为Hyperlink.LINK_DOCUMENT类型 . 然后以这种格式发送setHyperlink()一个字符串:
file:/E:/PROJECTS/SomePrj/ExcelFileName.xlsx#'ExcelSheetName'!B5
这将起作用 - 至少对于XSSF来说 .
使用aFile.toURI() . toString()在'#'字符之前构建filepart . 不要忘记添加 # , ' 和 ! 字符(与我的示例完全相同),否则它将无效 .
我没有在(其他非常好的)POI文档中看到这种技术 .
我找到了正确的方法 . 在poi 3.16上测试并解决了在链接中不允许空间的烦人问题(工作表名称可以有空间) . 如果您尝试
link.setAddress("ExcelWrite.xlsx#'Sheet 1'!A2");
,您将收到错误正确的代码: