代码拉取完成,页面将自动刷新
EEC支持Path
, File
, URL
, byte[]
, ByteBuffer
, InputStream
, base64 image string
7种类型的Media,你可以使用Column#writeAsMedia()
或者@MediaColumn
注解来指定当前列类型为Media
public static class Pic {
@ExcelColumn("地址")
private String addr;
@MediaColumn // 指定以Media形式导出
private String url;
}
new Workbook()
.addSheet(new ListSheet<>(Pic.randomTestData()).setRowHeight(100))
.writeTo(Paths.get("F://"));
参考wiki
你说是导出,我说的是导入的场景,比如导入用户信息,excel中存在用户的人脸照片。看wiki里面只有这种方式,获取所有图片,就没办法把图片和人对应起来了
Picture对象包含一个Dimension属性,使用它可以拿到该图片的位置,如果图片在单元格中只需要判断Dimension.firstRow == row.getRowNum()
即可,你也可以将Dimension的firstRow和firstColumn进行简单处理(firstColumn << 24) | lastColumn
得到一个long值,然后将这个long值做为key,Picture做为value值保存到Map中,获取的时候再次计算即可获对象Picture
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
本项目是直接复制github上的地址,所以wiki无法看到图片,你可以在https://github.com/wangguanquan/eec/wiki/看到原始文档
强
示例代码:
Sheet sheet = reader.sheet(0);
List<Drawings.Picture> pictures = sheet.listPictures();
Map<Long, List<Drawings.Picture>> map = Collections.emptyMap();
if (pictures != null) {
// key: 单元格位置
// value: 单元格包含的图片(可能为N张)
map = pictures.stream().collect(Collectors.groupingBy(a -> ((long) a.getDimension().firstRow) << 24 | a.getDimension().firstColumn));
}
for (Iterator<org.ttzero.excel.reader.Row> iter = sheet.iterator(); iter.hasNext(); ) {
org.ttzero.excel.reader.Row row = iter.next();
// 已知第5列包含图片
List<Drawings.Picture> picList = map.get((long) row.getRowNum() << 24 | 5); // <- 再次计算单元格位置 row.getRowNum获行, 5为列
if (picList != null) {
// TODO 业务处理
}
// 多个列包含图片,可以遍历
for (int i = row.getFirstColumnIndex(), len = row.getLastColumnIndex(); i < len; i++) {
List<Drawings.Picture> picList2 = map.get((long) row.getRowNum() << 24 | i + 1);
if (picList2 != null) {
// TODO 业务处理...
}
}
}
牛的,复制过来就能用,今天刚好有这个需求
登录 后才可以发表评论