Apache POI HSSF:从单元格读取具有数字符号(#)的超链接地址,给出不正确的链接地址

时间:2012-09-12 14:35:26

标签: apache-poi

重现问题的步骤: -

  1. 创建一个xls文件,其中一个单元格带有超链接。(超链接的地址中应包含数字符号(#)。例如“http://www.bailii.org/databases.html#uk”)

  2. 尝试阅读超链接的地址。它将链接地址设为“uk”。地址编号(#)后面的字符只被视为超链接地址。

  3. 代码段: -

    String strLinkAddress = cell.getHyperlink()。getAddress();

    它会将“uk”作为链接地址而不是“http://www.bailii.org/databases.html#uk”返回

1 个答案:

答案 0 :(得分:0)

请改用cell.getHyperlink().getLabel()。您也可以在这里查看source,了解POI如何处理.xls文件中可能存在的各种超链接。

修改

好的,如果标签与地址不符,我们的工作就更难了。这有点像我一样的hackish。因此,如果我们检查HSSFHyperlink类并查看不同的枚举,http://www.google.com之类的类型LINK_URL就是我们所期望的类型。 http://www.bailii.org/databases.html#uk之类的内容将解析为LINK_DOCUMENT。但它不是一个文件,它是一个URL!检查课程HyperlinkRecord,我在第245行之前看到了评论:

Text describing a place in document. In Excel UI, this is appended to the address, (after a '#' delimiter). This field is optional. If present, the HLINK_PLACE must be set.

HLINK_PLACE使同一个类的第699行中的isDocumentLink返回true,从而将其归类为文档链接,而不是URL链接。

因此,设计行为似乎只要#出现在链接中,POI会将其视为文档中的链接。不知道我是否称这是一个错误,只是它不像你想要的那样工作。