1

重现问题的步骤:-

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

  2. 尝试读取超链接的地址。它将给出链接地址为“uk”。只有地址数字符号(#)之后的字符被认为是超链接地址。

代码片段:-

字符串 strLinkAddress = cell.getHyperlink().getAddress();

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

4

1 回答 1

0

改为使用cell.getHyperlink().getLabel()。您也可以在此处查看源代码,了解 POI 如何处理 .xls 文件中可能存在的不同类型的超链接。

编辑

好的,所以如果标签与地址不匹配,我们的工作就更难了。这对我来说有点骇人听闻。因此,如果我们检查HSSFHyperlink类并查看不同的枚举,类似的东西http://www.google.comLINK_URL是我们所期望的类型。类似的东西http://www.bailii.org/databases.html#uk会解析为 type LINK_DOCUMENT。但它不是一个文档,它是一个 URL!检查 class 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.

同一类的第699 行HLINK_PLACEisDocumentLink的 make 返回 true,因此将其分类为文档链接,而不是 URL 链接。

因此,每当链接中出现 # 时,POI 将其视为文档中的链接,这似乎是一种设计行为。不知道我是否称其为错误,只是它不像您希望的那样工作。

于 2012-11-06T06:06:32.063 回答