使用 POI 和 Jsoup 在错误位置超链接

Hyperlink in wrong location using POI and Jsoup

我有一个htmltable这样的

| Data0 | Data1(with href) | Data2(with href) | Data3 |...| Data10 |
| Data0 | Data1(with href) | Data2(with href) | Data3 |...| Data10 |

更新:HTML table

代码
<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);

在循环中你每次用 first td a link 覆盖 link row.

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

1) Css select或

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

将 select 始终是行中第一个 td 中的 first href 字符串。我猜你想要 select 对应于 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++;
}

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