java - 使用 POI 和 Jsoup 的超链接位于错误位置

标签 java html apache-poi jsoup

我有一个像这样的 html 表格

| Data0 | Data1(with href) | Data2(with href) | Data3 |...| Data10 |
| Data0 | Data1(with href) | Data2(with href) | Data3 |...| Data10 |
<小时/>

更新:表格的HTML代码

<table cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr><th>...</th></tr>
        <tr>
            <td>Data0</td>
            <td><a href="http://www.abc1.org">Data1</a></td>
            <td><a href="http://www.abc2.org">Data2</a></td>
            <td>Data3</td>
            <td>Data4</td>
            ...
            <td>Data10</td>
        </tr>
        <tr><!--2nd record--></tr>
        <tr><!--3rd record--></tr>
    </tbody>
</table>
<小时/>

在 Excel 输出中,所有文本都将成功检索。

<小时/>

目的:我希望将 Data1 的超链接嵌入到带有文本“Data1”的单元格,但我的代码会将超链接嵌入到“Data10”。

Excel 中的预期第一行:

| Data0 | Data1(with hyperlink to www.abc1.org) | Data2 | Data3 |...| Data10 |

Excel 中的当前输出:

| Data0 | Data1 | Data2 | Data3 |...| Data10(with hyperlink to www.abc1.org) |
<小时/>

我的部分代码在这里(相关代码):

    Hyperlink link = createHelper.createHyperlink(Hyperlink.LINK_URL);
    Elements tds = row.select("td");
    count = 0; //cell location at that row
    for (Element element : tds) {
            cell = header.createCell(count);            
            link.setAddress(row.select("td a[href]").first().attr("href")); 
            cell.setCellValue(element.text());
            cell.setHyperlink(link);    
            count++;
    }

提前致谢。

最佳答案

1) 你只有一个

Hyperlink link = createHelper.createHyperlink(Hyperlink.LINK_URL);

在循环中,每次都使用内的第一个 td a 链接覆盖链接。

要解决此问题,您可能需要为要使用的每个链接创建一个新的链接实例。 (我对apache-poi不熟悉,所以我可能是错的)

1) CSS 选择器

row.select("td a[href]").first().attr("href")

将始终选择行中第一个 td 中的第一个 href 字符串。我猜您想选择与 td 对应的 href 字符串(如果存在)。

建议的代码片段

Elements tds = row.select("td");
count = 0; //cell location at that row
for (Element element : tds) {
    cell = header.createCell(count);            

    cell.setCellValue(element.text());
    Element href = element.select("a[href]").first();
    if (href != null){
         Hyperlink link = createHelper.createHyperlink(Hyperlink.LINK_URL);
         link.setAddress(href.attr("href"));
         cell.setHyperlink(link); 
    }
    count++;
}

请注意,我的代码未经测试。

关于java - 使用 POI 和 Jsoup 的超链接位于错误位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31991292/

相关文章:

java - 使用 POI 读取/写入非常大的 pptx 文件

java - 无法解析 JSP 和 Servlet 中的 getException() 方法

java - Apache flink 1.52 Rowtime 时间戳为空

html - 为什么背景图像在 td 上不起作用?

javascript - 将 CSS Transition 与点击事件联系起来

java - 如何使用 Apache POI 移动特定单元格?

java - BigDecimal 欧拉数计算模拟 Math.exp(double a)

java - 正在运行 rmi 服务器,未找到类

html - 在应用栏外使用 Windows 8 默认图标集

java - 由 : java. lang.LinkageError : loader constraint violation: when resolving method "org. apache.xmlbeans.XmlOptions.setLoadReplaceDocumentElement 引起