栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java生成Excel文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java生成Excel文件

前后端分离,前端如何下载Excel

目录:

  1. 方式一:通过点击链接自动下载
  2. 方式二:后端生成Excel文件后存入oss,然后将返回地址给前端,由前端下载

第一步:导入jar包

        
		    cn.hutool
		    hutool-all
		    5.7.13
		
		
		
		    org.apache.poi
		    poi-ooxml
		    5.0.0
		
一.通过点击链接自动下载
	@GetMapping("/downloadExcel")
    @ResponseBody
    public void downLoadFile(HttpServletResponse response) {
		Map row1 = new linkedHashMap<>();
		row1.put("name", "苹果手机");
		row1.put("companyName", "苹果科技有限公司");
		row1.put("companyLogo", "https://iiot-dev.fxs100.cn/iiot/oauth/2021/6/21/3061624240679082_183_196.jpg");
		row1.put("companyProfile", "苹果科技有限公司有限公司是中国信息通信研究院主持组建、中信国安战略注资的高新技术企业。十余年来围绕移动寻址、企业级SaaS、移动互联网标识入口等展开生态布局,是全国领先的移动营销服务商。");
		row1.put("personPhone", "010-82512114");
		row1.put("httpName", "https://apple.com");
		row1.put("column", "官网首页:https://apple.com");

		Map row2 = new linkedHashMap<>();
		row2.put("name", "华为手机");
		row2.put("companyName", "华为科技有限公司");
		row2.put("companyLogo", "https://iiot-dev.fxs100.cn/iiot/oauth/2021/6/21/3061624240679082_183_196.jpg");
		row2.put("companyProfile", "华为科技有限公司是中国信息通信研究院主持组建、中信国安战略注资的高新技术企业。十余年来围绕移动寻址、企业级SaaS、移动互联网标识入口等展开生态布局,是全国领先的移动营销服务商。");
		row2.put("personPhone", "010-82512114");
		row2.put("httpName", "https://huawei.com");
		row2.put("column", "官网首页:https://huawei.com");
		List> rowArr = new ArrayList();
		rowArr.add(row1);
		rowArr.add(row2);
		

		ArrayList> rows = CollUtil.newArrayList(row1, row2);
		
		// 通过工具类创建writer
		//ExcelWriter writer = ExcelUtil.getWriter("f:/user/writeMapTest.xlsx");
		// 通过工具类创建writer,默认创建xls格式
		ExcelWriter writer = ExcelUtil.getWriter();
		//写入图片
        for(int i=0; i row = rowArr.get(i);
        	String companyLogo = row.get("companyLogo").toString();
        	//读取图片
        	
        	InputStream inputStream = null;
            ByteArrayOutputStream outputStream = null;
            byte[] buffer = null;
            try {
                // 创建URL
                URL url = new URL(companyLogo);
                // 创建链接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                inputStream = conn.getInputStream();
                outputStream = new ByteArrayOutputStream();
                // 将内容读取内存中
                buffer = new byte[1024];
                int len = -1;
                while ((len = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, len);
                }
                buffer = outputStream.toByteArray();
            }catch(IOException e) {
            	e.printStackTrace();
            }finally {
                if (inputStream != null) {
                    try {
                        // 关闭inputStream流
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        	writePic(writer, 2, i+1, buffer, HSSFWorkbook.PICTURE_TYPE_JPEG);
        	
        }
        //自定义标题别名
		writer.addHeaderAlias("name", "关键词");
		writer.addHeaderAlias("companyName", "公司名称");
		writer.addHeaderAlias("companyLogo", "公司logo");
		writer.addHeaderAlias("companyProfile", "简介");
		writer.addHeaderAlias("personPhone", "电话");
		writer.addHeaderAlias("httpName", "手机域名");
		writer.addHeaderAlias("column", "栏目");
		// 合并单元格后的标题行,使用默认标题样式
		//writer.merge(row1.size() - 1, "");
		// 一次性写出内容,使用默认样式,强制输出标题
		writer.write(rows, true);
		
		// 关闭writer,释放内存
		//writer.close();
		//response为HttpServletResponse对象
		//response为HttpServletResponse对象
		response.setContentType("application/vnd.ms-excel;charset=utf-8"); 
		//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
		response.setHeader("Content-Disposition","attachment;filename=test.xls"); 
		ServletOutputStream out =null;
		try {
			out = response.getOutputStream();
			writer.flush(out, true);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		// 关闭writer,释放内存
		writer.close();
		//此处记得关闭输出Servlet流
		IoUtil.close(out);
    }
	
	
	private static void writePic(ExcelWriter writer, int x, int y, byte[] pictureData, int picType) {
        Sheet sheet = writer.getSheet();
        Drawing drawingPatriarch = sheet.createDrawingPatriarch();

        //设置图片单元格位置
        ClientAnchor anchor = drawingPatriarch.createAnchor(0, 0, 0, 0, x, y, x + 1, y + 1);
        //随单元格改变位置和大小
        anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
        //添加图片
        int pictureIndex = sheet.getWorkbook().addPicture(pictureData, picType);
        drawingPatriarch.createPicture(anchor, pictureIndex);
    }
二.直接存入oss,返回地址给前端,由前端下载
	public static void main(String[] args) {
		Map row1 = new linkedHashMap<>();
		row1.put("name", "苹果手机");
		row1.put("companyName", "苹果科技有限公司");
		row1.put("companyLogo", "https://iiot-dev.fxs100.cn/iiot/oauth/2021/6/21/3061624240679082_183_196.jpg");
		row1.put("companyProfile", "苹果科技有限公司有限公司是中国信息通信研究院主持组建、中信国安战略注资的高新技术企业。十余年来围绕移动寻址、企业级SaaS、移动互联网标识入口等展开生态布局,是全国领先的移动营销服务商。");
		row1.put("personPhone", "010-82512114");
		row1.put("httpName", "https://apple.com");
		row1.put("column", "官网首页:https://apple.com");

		Map row2 = new linkedHashMap<>();
		row2.put("name", "华为手机");
		row2.put("companyName", "华为科技有限公司");
		row2.put("companyLogo", "https://iiot-dev.fxs100.cn/iiot/oauth/2021/6/21/3061624240679082_183_196.jpg");
		row2.put("companyProfile", "华为科技有限公司是中国信息通信研究院主持组建、中信国安战略注资的高新技术企业。十余年来围绕移动寻址、企业级SaaS、移动互联网标识入口等展开生态布局,是全国领先的移动营销服务商。");
		row2.put("personPhone", "010-82512114");
		row2.put("httpName", "https://huawei.com");
		row2.put("column", "官网首页:https://huawei.com");
		List> rowArr = new ArrayList();
		rowArr.add(row1);
		rowArr.add(row2);

		ArrayList> rows = CollUtil.newArrayList(row1, row2);
		
		// 通过工具类创建writer
		ExcelWriter writer = ExcelUtil.getWriter("f:/user/writeMapTest.xlsx");
		
		
        //写入图片
        for(int i=0; i row = rowArr.get(i);
        	String companyLogo = row.get("companyLogo").toString();
        	//读取图片
        	// 1.网络地址
        	InputStream inputStream = null;
            ByteArrayOutputStream outputStream = null;
            byte[] buffer = null;
            try {
                // 创建URL
                URL url = new URL(companyLogo);
                // 创建链接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                inputStream = conn.getInputStream();
                outputStream = new ByteArrayOutputStream();
                // 将内容读取内存中
                buffer = new byte[1024];
                int len = -1;
                while ((len = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, len);
                }
                buffer = outputStream.toByteArray();
            }catch(IOException e) {
            	e.printStackTrace();
            }finally {
                if (inputStream != null) {
                    try {
                        // 关闭inputStream流
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        	writePic(writer, 2, i+1, buffer, HSSFWorkbook.PICTURE_TYPE_JPEG);
        	
        }
        
		//自定义标题别名
		writer.addHeaderAlias("name", "关键词");
		writer.addHeaderAlias("companyName", "公司名称");
		writer.addHeaderAlias("companyLogo", "公司logo");
		writer.addHeaderAlias("companyProfile", "简介");
		writer.addHeaderAlias("personPhone", "电话");
		writer.addHeaderAlias("httpName", "手机域名");
		writer.addHeaderAlias("column", "栏目");	
		// 合并单元格后的标题行,使用默认标题样式
		//writer.merge(row1.size() - 1, "");
		// 一次性写出内容,使用默认样式,强制输出标题
		writer.write(rows, true);
		// 关闭writer,释放内存
		writer.close();
	}
	
	
	private static void writePic(ExcelWriter writer, int x, int y, byte[] pictureData, int picType) {
        Sheet sheet = writer.getSheet();
        Drawing drawingPatriarch = sheet.createDrawingPatriarch();

        //设置图片单元格位置
        ClientAnchor anchor = drawingPatriarch.createAnchor(0, 0, 0, 0, x, y, x + 1, y + 1);
        //随单元格改变位置和大小
        anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
        //添加图片
        int pictureIndex = sheet.getWorkbook().addPicture(pictureData, picType);
        drawingPatriarch.createPicture(anchor, pictureIndex);
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/281616.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号