首页 文章

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

提问于
浏览
5

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

3 回答

  • 3

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

  • 0

    您还可以使用POI链接到 another 工作表中的单元格地址 .

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

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

    这将起作用 - 至少对于XSSF来说 .

    使用aFile.toURI() . toString()在'#'字符之前构建filepart . 不要忘记添加 #'! 字符(与我的示例完全相同),否则它将无效 .

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

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

相关问题