精华内容
下载资源
问答
  • 1.1 使用String类型导出 定义自己的Converter,不使用默认的StringImageConverter public class MyStringImageConverter implements Converter { @Override public Class supportJavaTypeKey() { return String....

    1.1 使用String类型导出   定义自己的Converter,不使用默认的StringImageConverter

    public class MyStringImageConverter implements Converter<String> {
        @Override
        public Class supportJavaTypeKey() {
            return String.class;
        }
    
        @Override
        public CellDataTypeEnum supportExcelTypeKey() {
            return CellDataTypeEnum.IMAGE;
        }
    
        @Override
        public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
                                        GlobalConfiguration globalConfiguration) {
            throw new UnsupportedOperationException("Cannot convert images to string");
        }
    
        //图片失效处理
        @Override
        public CellData convertToExcelData(String value, ExcelContentProperty contentProperty,
                                           GlobalConfiguration globalConfiguration) throws IOException {
            File file = new File(value);
            if(file.exists()){
                //文件存在
                return new CellData(FileUtils.readFileToByteArray(new File(value)));
            }
            //直接返回文字描述
            //FileUtils.readFileToByteArray(new File("/home/test.jpg"))
            return new CellData("无法加载图片");
        }
    
    }

    1.2.更改图片字段注解

    @ExcelProperty(value = {"图片"},index = 0,converter = MyStringImageConverter.class)
    private String siteImages; 
    

    2.1使用URL类型导出 同理定义自己的Converter 处理异常

    public class MyUrlImageConverter implements Converter<URL> {
        @Override
        public Class supportJavaTypeKey() {
            return URL.class;
        }
    
        @Override
        public CellDataTypeEnum supportExcelTypeKey() {
            return CellDataTypeEnum.IMAGE;
        }
    
        @Override
        public URL convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
            GlobalConfiguration globalConfiguration) {
            throw new UnsupportedOperationException("Cannot convert images to url.");
        }
    
        @Override
        public CellData convertToExcelData(URL value, ExcelContentProperty contentProperty,
            GlobalConfiguration globalConfiguration) throws IOException {
            InputStream inputStream = null;
            try {
                //开启连接
                URLConnection uc = value.openConnection();
                URL url  = null;
                //获取响应状态
                int statusCode = ((HttpURLConnection) uc).getResponseCode();
                switch (statusCode){
                    case 200:
                        inputStream = value.openStream();
                        break;
                    case 404:
                        //默认给一个图片
                        url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598096095144&di=9a72ad26e83effb9341c711c9818b85f&imgtype=0&src=http%3A%2F%2Fpic.616pic.com%2Fys_bnew_img%2F00%2F11%2F69%2Fj2AjnHspwT.jpg");
                        inputStream = url.openStream();
                        break;
                    default :
                        url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598096095144&di=9a72ad26e83effb9341c711c9818b85f&imgtype=0&src=http%3A%2F%2Fpic.616pic.com%2Fys_bnew_img%2F00%2F11%2F69%2Fj2AjnHspwT.jpg");
                        inputStream = url.openStream();
                        break;
                }
                byte[] bytes = IoUtils.toByteArray(inputStream);
                return new CellData(bytes);
            }catch (ConnectException exception){
                //捕获下链接异常
                URL url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598096095144&di=9a72ad26e83effb9341c711c9818b85f&imgtype=0&src=http%3A%2F%2Fpic.616pic.com%2Fys_bnew_img%2F00%2F11%2F69%2Fj2AjnHspwT.jpg");
                inputStream = url.openStream();
                byte[] bytes = IoUtils.toByteArray(inputStream);
                return new CellData(bytes);
            }catch (FileNotFoundException fileNotFoundException){
                URL url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598096095144&di=9a72ad26e83effb9341c711c9818b85f&imgtype=0&src=http%3A%2F%2Fpic.616pic.com%2Fys_bnew_img%2F00%2F11%2F69%2Fj2AjnHspwT.jpg");
                inputStream = url.openStream();
                byte[] bytes = IoUtils.toByteArray(inputStream);
                return new CellData(bytes);
            }finally {
                if (inputStream != null) {
                    inputStream.close();
                }
            }
        }
    }

    2.2字段处理使用自定义MyUrlImageConverter

    @ExcelProperty(value = {"头像"},index = 2,converter = MyUrlImageConverter.class)
    private URL img;

    其他类型导出一样做下处理

    展开全文
  • 1.easyexcel导出图片简单操作参考官网 2.项目中遇到的问题:项目导出报表需要导出图片 easyexcel导出图片,数据库中的存储的图片是字符串类型(实际上还是图片的URL链接),需要先转为URL,再进行导出操作. 图片字段...

    1.easyexcel导出图片简单操作参考官网

    2.项目中遇到的问题:项目导出报表需要导出图片

    easyexcel导出图片,数据库中的存储的图片是字符串类型(实际上还是图片的URL链接),需要先转为URL,再进行导出操作.

    图片字段需要自己重新定义Conventer类:

    import com.alibaba.excel.converters.Converter;
    import com.alibaba.excel.enums.CellDataTypeEnum;
    import com.alibaba.excel.metadata.CellData;
    import com.alibaba.excel.metadata.GlobalConfiguration;
    import com.alibaba.excel.metadata.property.ExcelContentProperty;
    import com.alibaba.excel.util.IoUtils;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ConnectException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    
    public class MyUrlImageConverter implements Converter<URL> {
        @Override
        public Class supportJavaTypeKey() {
            return URL.class;
        }
    
        @Override
        public CellDataTypeEnum supportExcelTypeKey() {
            return CellDataTypeEnum.IMAGE;
        }
    
        @Override
        public URL convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
                                     GlobalConfiguration globalConfiguration) {
            throw new UnsupportedOperationException("Cannot convert images to url.");
        }
    
        @Override
        public CellData convertToExcelData(URL value, ExcelContentProperty contentProperty,
                                           GlobalConfiguration globalConfiguration) throws IOException {
            InputStream inputStream = null;
            try {
                //开启连接
                URLConnection uc = value.openConnection();
                URL url  = null;
                //获取响应状态
                int statusCode = ((HttpURLConnection) uc).getResponseCode();
                switch (statusCode){
                    case 200:
                        inputStream = value.openStream();
                        break;
                    case 404:
                        //默认给一个图片
                        url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598096095144&di=9a72ad26e83effb9341c711c9818b85f&imgtype=0&src=http%3A%2F%2Fpic.616pic.com%2Fys_bnew_img%2F00%2F11%2F69%2Fj2AjnHspwT.jpg");
                        inputStream = url.openStream();
                        break;
                    default :
                        url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598096095144&di=9a72ad26e83effb9341c711c9818b85f&imgtype=0&src=http%3A%2F%2Fpic.616pic.com%2Fys_bnew_img%2F00%2F11%2F69%2Fj2AjnHspwT.jpg");
                        inputStream = url.openStream();
                        break;
                }
                byte[] bytes = IoUtils.toByteArray(inputStream);
                return new CellData(bytes);
            }catch (ConnectException exception){
                //捕获下链接异常
                URL url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598096095144&di=9a72ad26e83effb9341c711c9818b85f&imgtype=0&src=http%3A%2F%2Fpic.616pic.com%2Fys_bnew_img%2F00%2F11%2F69%2Fj2AjnHspwT.jpg");
                inputStream = url.openStream();
                byte[] bytes = IoUtils.toByteArray(inputStream);
                return new CellData(bytes);
            }catch (FileNotFoundException fileNotFoundException){
                URL url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598096095144&di=9a72ad26e83effb9341c711c9818b85f&imgtype=0&src=http%3A%2F%2Fpic.616pic.com%2Fys_bnew_img%2F00%2F11%2F69%2Fj2AjnHspwT.jpg");
                inputStream = url.openStream();
                byte[] bytes = IoUtils.toByteArray(inputStream);
                return new CellData(bytes);
            }finally {
                if (inputStream != null) {
                    inputStream.close();
                }
            }
        }
    }
    

    返回的实体类:

    ​
    ic class Image {
        /**
         * 图片导出
         * <p>
         * 1. 创建excel对应的实体对象 参照{@link ImageData}
         * <p>
         * 2. 直接写即可
         */
        public void imageWrite() throws Exception {
            String fileName = "C:\\Users\\Administrator\\Desktop" + File.separator + "demo.xlsx";
    
            try {
                List<Teacher> list = new ArrayList<Teacher>();
    
                Teacher teacher = new Teacher();
                teacher.setName("zs").setImg(new URL("https://img.huiding-cloud.com/green-street/png/202102/2021022515328161423354747304712.png"));
                        
                list.add(teacher);
                EasyExcel.write(fileName, Teacher.class).sheet().doWrite(list);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    测试类

    public static void main(String[] args) {
        Image image = new Image();
        try {
            image.imageWrite();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    展开全文
  • 教你用EasyExcel导出包含图片列的excel 前情概要 众所周知,导入及导出功能在后台服务中很常见,博主目前参与的这个项目就有多Excel的导入和导出,但是在我昨天完成需求的时候,突然发现项目里目前的Excel工具类...

    教你用EasyExcel导出包含图片列的excel

    在这里插入图片描述

    前情概要

    众所周知,导入及导出功能在后台服务中很常见,博主目前参与的这个项目就有多Excel的导入和导出,但是在我昨天完成需求的时候,突然发现项目里目前的Excel工具类无法满足的我的业务需求。
    所以在参考EasyExcel官方文档的情况下,昨天经历千辛万苦完成了Excel中某几列是图片的导出(原谅我是个菜b)。

    正文来啦

    首先需要导入EasyExcel的maven依赖:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>${easyexcel.version}</version>
    </dependency>
    

    版本选最新的即可,我这里添加了版本的集中控制。

    然后打开www.baidu.com搜索EasyExcel官方文档,找到快速开始写Excel那一栏:

    这就是官方给我的demo,已经很详细了,然后我们找到图片导出这个功能:

    根据文档提示,我们需要编写Excel对应的实体类:

    @Data
    @ContentRowHeight(15)
    @HeadRowHeight(25)
    @ColumnWidth(25)
    @Accessors(chain = true)
    public class ExportInspectionModel {
    
        /**
         * 检测名称
         */
        @ExcelProperty(value = "检验名称")
        private String inspectionName;
    
        /**
         * 施工单位
         */
        @ExcelProperty(value = "检验名称")
        private String constructionOrganization;
        /**
         * 见证人id
         */
        @ExcelProperty(value = "见证人")
        private String userName;
    
    
        /**
         * 检验类型:1:平行检验;2:见证检验。
         */
        @ExcelProperty(value = "检验类型")
        private String inspectionType;
        /**
         * 项目id
         */
        @ExcelProperty(value = "项目名称")
        private String projectName;
        /**
         * 检验报告url
         */
        @ExcelProperty(value = "报告",converter = UrlImageConverter.class)
        @ColumnWidth(60)
        private URL inspectionReportUrl;
        /**
         * 创建时间
         */
        @ExcelProperty(value = "创建时间",converter = LocalDateTimeConverterUtil.class)
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime createTime;
    
    
    

    然后就需要我们编写自己的业务数据查询逻辑了,如果只是普通的数据导出,可以不用像我这么复杂,直接把查询到的数据转换为ExcelModelList集合即可。然后调用:

    ServletOutputStream outputStream = response.getOutputStream();
    EasyExcel.write(outputStream, ExportInspectionModel.class).sheet().doWrite(excelModelList);
    

    但是由于我这个需求导出数据列表包含图片,就不能这么操作了。
    这是官方文档给出的5种数据格式的图片导出类型:

    @Data
    @ContentRowHeight(100)
    @ColumnWidth(100 / 8)
    public class ImageData {
        private File file;
        private InputStream inputStream;
        /**
         * 如果string类型 必须指定转换器,string默认转换成string
         */
        @ExcelProperty(converter = StringImageConverter.class)
        private String string;
        private byte[] byteArray;
        /**
         * 根据url导出
         *
         * @since 2.1.1
         */
        private URL url;
    }
    

    由于我们项目数据库保存的是图片的url,所以我选择了最后一种方式进行图片的导出,也就是根据URL导出。
    在这里有一个注意点:实体类的图片url是String类型,需要转换为URL类型。

    setInspectionReportUrl(new URL(experimentalInspection.getInspectionReportUrl()))
    

    完成这些以后,就可以进行导出的测试了。这里是我进行测试的结果,就是图片宽高有点不合适,稍微调试即可。

    展开全文
  • EasyExcel导出并下载

    2021-01-02 16:57:53
    第一步:添加依赖 <dependency> <groupId>.../groupId>...说明:阿里easyexcel导出excel文件的思路: 和管理后台普通的查询列表一样,设计Api需要具备按条件查询的功能特性 按条件查询

    第一步:添加依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>1.0.2</version>
    </dependency>
    

    说明:阿里easyexcel导出excel文件的思路:

    和管理后台普通的查询列表一样,设计Api需要具备按条件查询的功能特性
    按条件查询出满足条件的records,封装成List集合
    使用easyexcel构建的工具类通过字节流读取,搭档输出流将数据写入Excel
    第二步:ExcelUtil工具类

    import com.alibaba.excel.ExcelWriter;
    import com.alibaba.excel.metadata.BaseRowModel;
    import com.alibaba.excel.metadata.Sheet;
    import com.alibaba.excel.support.ExcelTypeEnum;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    import java.util.List;
    
    
    public class ExcelUtil {
    
        /**
         * 导出 Excel :一个 sheet,带表头
         *
         * @param response HttpServletResponse
         * @param list 数据 list,每个元素为一个 BaseRowModel
         * @param fileName 导出的文件名
         * @param sheetName 导入文件的 sheet 名
         * @param model 映射实体类,Excel 模型
         */
        public static void writeExcel(HttpServletResponse response, List<? extends BaseRowModel> list,
                                      String fileName, String sheetName, BaseRowModel model)throws Exception  {
            ExcelWriter writer = new ExcelWriter(getOutputStream(fileName, response), ExcelTypeEnum.XLSX);
            Sheet sheet = new Sheet(1, 0, model.getClass());
            sheet.setSheetName(sheetName);
            writer.write(list, sheet);
            writer.finish();
        }
        /**
         * 导出文件时为Writer生成OutputStream
         *
         * @param fileName
         * @param response
         * @return
         */
        private static OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception {
            try {
                fileName = URLEncoder.encode(fileName, "UTF-8");
                response.setContentType("application/vnd.ms-excel");
                response.setCharacterEncoding("utf8");
                response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
                response.setHeader("Pragma", "public");
                response.setHeader("Cache-Control", "no-store");
                response.addHeader("Cache-Control", "max-age=0");
                return response.getOutputStream();
            } catch (IOException e) {
                throw new Exception("导出excel表格失败!", e);
            }
        }
    
    }
     
    

    第三步:封装model对象

    public class exportDataModel extends BaseRowModel {
    
        @ExcelProperty(value = { "列1", "列1" }, index = 0)
        private String 属性1;
        @ExcelProperty(value = { "列2", "列2" }, index = 1)
        private String 属性2;
        @ExcelProperty(value = { "列3", "列4" }, index = 2)
        private String 属性3;
        @ExcelProperty(value = { "列3", "列5" }, index = 3)
        private String 属性4;
        @ExcelProperty(value = { "列6", "列7" }, index = 4)
        private String 属性5;
        @ExcelProperty(value = { "列6", "列8" }, index = 5)
        private String 属性6;
    

    说明:作为映射实体类,需要继承 BaseRowModel 类,通过 @ExcelProperty 注解与 index 变量可以标注成员变量所映射的列,同时不可缺少 setter 方法

    本文主要使用到@ExcelProperty注解的2个属性

    value:用于指定Excel表头名称
    index:用于指定表头所在列的索引值,从0开始
    第四部:Controller代码演示

    try {
            String name = "演示导出模板.xlsx";
            Date date = Calendar.getInstance().getTime();
            SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyyMMddHHmmss");
            String formatDate_ymd = sdf_ymd.format(date);
            // 设置文件名
            String fileName = formatDate_ymd + name;
            String sheetName = "数据展示";
            
            // 按条件筛选records
            List<exportDataModel> list = this.getExportDataList();
            // easyexcel工具类实现Excel文件导出
            ExcelUtil.writeExcel(response, list, fileName, sheetName, new exportDataModel());
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    说明:fileName,sheetName 分别是导出文件的文件名和 sheet 名,new exportDataModel() 为导出数据的映射实体对象,list 为导出数据。

    第五步:效果展示
    技术分享图片

    在这里插入图片描述

    转载于

    http://www.bubuko.com/infodetail-3059829.html

    展开全文
  • easyExcel导出excel

    千次阅读 2019-06-03 17:27:54
    /** * 导出EXCEL * * @throws FileNotFoundException */ @RequestMapping("/excel") public void excel(HttpServletRequest request, HttpServletResponse response) throws Exception { ...
  • R先生一步步教你用EasyExcel导出包含多图片的Excel 光与光之间的黑暗,路人永不得知 书接上文说到,R先生之前有写过一篇用EasyExel导出包含图片的Excel文件,由于在官方文档并没有找到多图片导出的demo,在GitHub也...
  • easyExcel导出表格及合并单元格 前言 废话不多说,直接上效果图。 效果图 合并之前导出的: 合并之后导出的: 代码的实现主要是合并之后的,为了更好的分清数据之间的关系。 二、代码 目录 <只需要注意红色的&...
  • 使用easyexcel导出、读取、下载Excel表 1.引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.8</version> <...
  • 本文添加水印通过java生成图片,设置为excel背景图片实现。不仅仅局限于EasyExcel,凡是采用POI实现都可以采用该方案,但唯一的局限在于必须使用POI中的XSSFWorkbook对象,也就是对应Excel2007的版本,扩展名是.xlsx...
  • EasyExcel关于导出图片,没有废话,直接教程使用导入依赖实体类Controller按钮效果展示在这里插入图片描述](https://img-blog.csdnimg.cn/2021060314260583.png)![在这里插入图片描述 导入依赖 <dependency>...
  • 开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中! 首先我们先简单了解一下Excel: Excel xls和xlsx有什么区别: 1、文件格式不同。xls 是一个特有的二进制格式,其核心结构是复合文档类型的结构...
  • EXCEL导出 //headList excel头部 data数据内容 public static void exportExcel(HttpServletResponse response,String filename, List<List<String>> headList,List<List<Object>> data) ...
  • easyPOI和easyExcel图片导出

    千次阅读 2021-01-15 15:01:05
    导出图片的excel前言Apache poi、jxl 的缺陷阿里出品的 EasyExcelEasyExcel 解决了什么easyPOIeasyExel 前言 关于导出 Excel 文件,可以说是大多数服务中都需要集成的功能。那么,要如何优雅快速地(偷懒地)去...
  • 官方文档 导入jar <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> <groupId>com.alibaba<...easyexcel</artifactId> <version>2.2.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 408
精华内容 163
关键字:

easyexcel导出图片