将超链接放入excel中的图像(Apache POI)

时间:2015-12-09 05:01:11

标签: java apache-poi

我可以在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); 创建的图片中?

提前致谢!

1 个答案:

答案 0 :(得分:3)

在查看Excel如何存储时,对于XLSX文件的xl\drawings\_rels\drawing1.xml.relsxl\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());