使用 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++;
}
请注意,我的代码未经测试。
我有一个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++;
}
请注意,我的代码未经测试。