Easyexcel导出图片,固定单元格宽度自动高度保持图片比例
工作中有个导出需求,在导出的数据中有个图片。然后平常一直在使用 easyexcel,但在导出图片这块官方的案例中只是给出了
@ContentRowHeight(100) @ColumnWidth(100 / 8)
的方式进行设置,但我的每条数据图片比例可能存在差异,为了避免图片的比例失衡,找了个解决方法
灵感来源:如何根据单元格内容设置不同的样式?
这个Github上的一个issue,提到了使用 继承AbstractCellStyleStrategy 的方式来自定义单元格
并且你也能在源代码中,easyexcel-core
的 module 下的style包下找到一些 Strategy 类,这些源代码中带的样式策略,其中你能找到一个叫 LongestMatchColumnWidthStyleStrategy
的类。该类有个dataLength
方法,该方法便通过swith cell 类型判断来决定 cell 单元格的宽度,我们可以以此为思路修改下写一个自己的 Strategy。
该方法中的类型使用了 CellDataTypeEnum
枚举,但可以注意到该枚举中没有图片的类型,经过 debug 发现当单元格是图片时它会是 EMPTY
类型,且 imageDataList
属性可以看到我们塞进去的图片。有图片就能只能宽高,同时 Cell
类也能拿到单元行我也就能设置行高如下面的代码
switch (type) {
case STRING:
return cellData.getStringValue().getBytes().length;