java - 将超链接放入Excel中的图像(Apache POI) - 程序控制台
我可以在Apache POI中为单元设置超链接,但是我不知道如何将超链接放入图像中(我正在使用XSSF)
这是放置单元超链接的功能:
/**
* 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));
}
}
这是将图像放入指定单元格的功能:
/**
* Put image into sheet at position [row,col]
* @param sheet
* @param col
* @param row
* @param imgData
* @throws Exception
*/
private static void putImage(Workbook wb, Sheet sheet, int col, int row, byte[] imgData) throws Exception {
try {
Drawing drawing = sheet.createDrawingPatriarch();
int pictureIdx = wb.addPicture(imgData, Workbook.PICTURE_TYPE_PICT);
CreationHelper helper = wb.getCreationHelper();
ClientAnchor anchor4 = helper.createClientAnchor();
//set top-left corner of the picture,
//subsequent call of Picture#resize() will operate relative to it
anchor4.setCol1(col);
anchor4.setRow1(row);
anchor4.setCol2(col+1);
anchor4.setRow2(row+1);
drawing.createPicture(anchor4, pictureIdx);
} catch (Exception ex) {
log.severe("Exception : " + Utils.exceptionToString(ex));
}
}
=>如何将超链接放入由命令drawing.createPicture(anchor4,pictureIdx);创建的图片中?
提前致谢!
最佳答案
当查看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添加此类超链接,但是您可以按照以下方式使用底层的低级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());
相关推荐
- [交作业]Java入门第三季7-1综合实战:简易扑克牌游戏
- 子序列求和问题
- Java50道经典编程题:(三)打印水仙花数 ——循环结构的使用
- 输出水仙花数,同时统计水仙花数的个数
- 求10000内的水仙花数
- 2020年蓝桥杯模拟赛解题报告(Java版本)
- Java获取字符串指定长度的前缀和后缀
- java api设置统一前缀
- 蓝桥杯模拟题目——小明种草问题
- 蓝桥杯-第七届省赛javaA组-抽签
- 【蓝桥杯省赛JavaB组真题详解】寻找 2020(2020)
- 蓝桥杯(递归模块)
- 蓝桥杯:基础练习 2n皇后问题(笔记4)
- 蓝桥杯:算法提高 五次方数(笔记10)
- 279. 完全平方数(java)
- 【蓝桥杯2017Java】Excel地址
- 蓝桥杯十一届javab国赛扩散
- Java基础总结重点15 异常类
- jdk的安装
- nacos 报错is not in serverlist