我可以在Apache POI中为单元格设置超链接,但我不知道如何将超链接放入图像中(我使用XSSF)
这是放置单元格超链接的功能:
$pid
这是将图像放入指定单元格的功能:
/**
* Helper function for putting hyperlink into specified cell
* @param label
* @param value
* @param col
* @param row
* @param sheet
*/
private static void putImageHyperlink(Cell cell, CellStyle hyperlinkStyle, String value, Workbook wb) {
try {
CreationHelper createHelper = wb.getCreationHelper();
Hyperlink link = createHelper.createHyperlink(Hyperlink.LINK_URL);
link.setAddress(value);
cell.setHyperlink(link);
cell.setCellStyle(hyperlinkStyle);
// Put hyperlink value
cell.setCellValue(value);
} catch (Exception e) {
log.severe("Can't create hyperlink : " + Utils.exceptionToString(e));
}
}
=>如何将超链接放入由命令 drawing.createPicture(anchor4,pictureIdx); 创建的图片中?
提前致谢!
答案 0 :(得分:3)
在查看Excel如何存储时,对于XLSX文件的xl\drawings\_rels\drawing1.xml.rels
和xl\drawings\drawing1.xml
部分中的图像,似乎存储的方式不同:
<Relationship Id="rId1" Target="http://poi.apache.org" TargetMode="External" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"/>
<xdr:cNvPr descr="Picture" id="2" name="Picture 1">
<a:hlinkClick xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="rId1"/>
</xdr:cNvPr>
POI不支持通过它的API添加此类超链接,但您可以使用底层的lowlevel-API,首先创建超链接的关系,然后将关系设置为Picture-object中的超链接:
PackageRelationship rel = ((XSSFDrawing)patriarch).getPackagePart().addRelationship(
new URI("http://poi.apache.org"),
TargetMode.EXTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink");
((XSSFDrawing)patriarch).addRelation(rel.getId(),new POIXMLDocumentPart());
CTPictureNonVisual nvPicPr = ((XSSFPicture)picture).getCTPicture().getNvPicPr();
CTHyperlink hLinkClick = nvPicPr.getCNvPr().addNewHlinkClick();
hLinkClick.setId(rel.getId());