前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SSM-POI的操作Exce模板导出

SSM-POI的操作Exce模板导出

作者头像
用户9006224
发布于 2022-12-21 01:00:36
发布于 2022-12-21 01:00:36
94800
代码可运行
举报
文章被收录于专栏:cjz的专栏cjz的专栏
运行总次数:0
代码可运行

前提

依赖等可以去看看我的 java -POI的基本操作Excel文章

通知浏览器下载工具类(一个流,两个头)

‘记得扫描到工具类’

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.springframework.stereotype.Component;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

//一个流 输出流
//两个头 mine类型 和 打开方式

@Component //交给spring管理
public class DownloadUtil {
	
	/**
	 * @param filePath 要下载的文件路径
	 * @param returnName 返回的文件名
	 * @param response HttpServletResponse
	 * @param delFlag 是否删除文件
	 */
	protected void download(String filePath,String returnName,HttpServletResponse response,boolean delFlag){
		this.prototypeDownload(new File(filePath), returnName, response, delFlag);
	}


	/**
	 * @param file 要下载的文件
	 * @param returnName 返回的文件名
	 * @param response HttpServletResponse
	 * @param delFlag 是否删除文件
	 */
	protected void download(File file,String returnName,HttpServletResponse response,boolean delFlag){
		this.prototypeDownload(file, returnName, response, delFlag);
	}
	
	/**
	 * @param file 要下载的文件
	 * @param returnName 返回的文件名
	 * @param response HttpServletResponse
	 * @param delFlag 是否删除文件
	 */
	public void prototypeDownload(File file,String returnName,HttpServletResponse response,boolean delFlag){
		// 下载文件
		FileInputStream inputStream = null;
		ServletOutputStream outputStream = null;
		try {
			if(!file.exists()) return;
			response.reset();
			//设置响应类型	PDF文件为"application/pdf",WORD文件为:"application/msword", EXCEL文件为:"application/vnd.ms-excel"。  
			response.setContentType("application/octet-stream;charset=utf-8");

			//设置响应的文件名称,并转换成中文编码
			//returnName = URLEncoder.encode(returnName,"UTF-8");
			returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1"));	//保存的文件名,必须和页面编码一致,否则乱码
			
			//attachment作为附件下载;inline客户端机器有安装匹配程序,则直接打开;注意改变配置,清除缓存,否则可能不能看到效果
			response.addHeader("Content-Disposition",   "attachment;filename="+returnName);  
			
			//将文件读入响应流
			inputStream = new FileInputStream(file);
			outputStream = response.getOutputStream();
			int length = 1024;
			int readLength=0;
			byte buf[] = new byte[1024];
			readLength = inputStream.read(buf, 0, length);
			while (readLength != -1) {
				outputStream.write(buf, 0, readLength);
				readLength = inputStream.read(buf, 0, length);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				outputStream.flush();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				outputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				inputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			//删除原文件
			
			if(delFlag) {				
				file.delete();
			}
		}
	}

	/**
	 * by tony 2013-10-17
	 * @param byteArrayOutputStream 将文件内容写入ByteArrayOutputStream
	 * @param response HttpServletResponse	写入response
	 * @param returnName 返回的文件名
	 */
	public void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException{
		response.setContentType("application/octet-stream;charset=utf-8");
		returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1"));			//保存的文件名,必须和页面编码一致,否则乱码
		response.addHeader("Content-Disposition",   "attachment;filename=" + returnName);
		response.setContentLength(byteArrayOutputStream.size());
		
		ServletOutputStream outputstream = response.getOutputStream();	//取得输出流
		byteArrayOutputStream.writeTo(outputstream);					//写到输出流
		byteArrayOutputStream.close();									//关闭
		outputstream.flush();											//刷数据
	}
}

准备一个Excel模板

前端代码(JSP)

我创建的是一个jsp文件,只要请求到导出方法即可,其余无所谓

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ include file="../../base.jsp"%>
<!DOCTYPE html>
<html>

<head>
    <!-- 页面meta -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>数据导出</title>
    <meta name="description" content="AdminLTE2定制版">
    <meta name="keywords" content="AdminLTE2定制版">
    <!-- Tell the browser to be responsive to screen width -->
    <meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport">
    <!-- 页面meta /-->
</head>
<body>
<div id="frameContent" class="content-wrapper" style="margin-left:0px;">


        <form role="form" action="请求地址">
            <div class="input-group input-group-sm" >
                <div class="input-group-addon">
                    <i class="fa fa-calendar"></i>
                </div>
                <input type="text" name="inputDate" class="form-control pull-right" id="datepicker1">
                <span class="input-group-btn">
            <button type="submit"   class="btn btn-info btn-flat">根据模板导出</button>
        </span>
            </div>
        </form>
    </div>
</section>
</div>
</body>
<script src="../../plugins/datepicker/bootstrap-datepicker.js"></script>
<script src="../../plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script>
<link rel="stylesheet" href="../../css/style.css">
<script>
    $('#datepicker1').datepicker({
        language: "zh-CN",
        autoclose: true,
        format: 'yyyy-mm',
        startView: 'months', //开始视图层,为月视图层
        maxViewMode:'years', //最大视图层,为年视图层
        minViewMode:'months', //最小视图层,为月视图层
    });
</script>

</html>

Java代码模板

只是模板,里面中文的地方请仔细看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 @Autowired //注入工具类
    private DownloadUtil downloadUtil;

 @RequestMapping(value = "/这根据需求来定义" ,name = "带模板导出表")
    public void printExcelTemplate(String inputDate) throws Exception{
//        1、查询导出数据,具体方法根据业务来
        List<CprintExcelVo> contractProductVoList = contractService.findContractProductVoListByShipTime(inputDate,getCompanyId());

//        创建一个有内容的工作薄
        String templatePath = session.getServletContext().getRealPath("/make/xlsprint/tOUTPRODUCT.xlsx");
        //读取项目下的模板
        Workbook workbook = new XSSFWorkbook(new FileInputStream(templatePath));
		//获取第一个工作簿
        Sheet sheet = workbook.getSheetAt(0);
//        添加内容2020-10    2020年10月份出货表
        sheet.getRow(0).getCell(1).setCellValue(inputDate.replaceAll("-0","年").replaceAll("-","年")+"月份出货表 ");


//        获取模板中的8个样式
        CellStyle[] cellStyles = new CellStyle[8];
        Row row = sheet.getRow(2);
        for (int i = 1; i <=8; i++) {
            cellStyles[i-1] = row.getCell(i).getCellStyle();
        }
// 		从第二个
        int rowIndex = 2;
        Cell cell = null;
        for (ContractProductVo contractProductVo : contractProductVoList) {
            row = sheet.createRow(rowIndex);
            row.setHeightInPoints(20);

//以下是获取样式,并将查询的字段写入到表格中
            cell = row.createCell(1);
            cell.setCellValue(CprintExcelVo.getCustomName());
            cell.setCellStyle(cellStyles[0]);

            cell = row.createCell(2);
            cell.setCellValue(CprintExcelVo.getContractNo());
            cell.setCellStyle(cellStyles[1]);

            cell = row.createCell(3);
            cell.setCellValue(CprintExcelVo.getProductNo());
            cell.setCellStyle(cellStyles[2]);

            cell = row.createCell(4);
            cell.setCellValue(CprintExcelVo.getCnumber());
            cell.setCellStyle(cellStyles[3]);

            cell = row.createCell(5);
            cell.setCellValue(CprintExcelVo.getFactoryName());
            cell.setCellStyle(cellStyles[4]);
//将日期格式:yyyy-MM-dd
            cell = row.createCell(6);
            cell.setCellValue( new SimpleDateFormat("yyyy-MM-dd").format( contractProductVo.getDeliveryPeriod())); //日期
            cell.setCellStyle(cellStyles[5]);

            cell = row.createCell(7);
            cell.setCellValue( new SimpleDateFormat("yyyy-MM-dd").format( contractProductVo.getShipTime()));   //日期
            cell.setCellStyle(cellStyles[6]);

            cell = row.createCell(8);
            cell.setCellValue(contractProductVo.getTradeTerms());
            cell.setCellStyle(cellStyles[7]);

            rowIndex++;
        }
//		创建字节数组输出流
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        //将Excel输出到流中
        workbook.write(byteArrayOutputStream);
//调用工具类,通知浏览器下载
        downloadUtil.download(byteArrayOutputStream,response,"导出表.xlsx");

    }

结果图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
模板导出Excel
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161514.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
1K0
模板导出Excel
EXCLS 的导出 下载
/** * 下载 * @param response * @param request * @return * @throws Exception */ /*@RequestMapping(value="downExels") public String typeExls(HttpServletResponse response ,HttpServletRequest request)throws Exc
斯文的程序
2019/11/07
4160
Springboot之poi导出
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106439.html原文链接:https://javaforall.c
全栈程序员站长
2022/08/04
9300
poi导出文件
简单记录一下,方便自己使用,此接口直接会在浏览下下载报告 @RequestMapping(value="aa",method = RequestMethod.GET) @ResponseBody public ResponseWrapper aa(HttpServletResponse response, ){ //获取平台Id String platFrom
IT云清
2019/01/22
9640
java实现Excel表格导出
导出excel学习网址:http://www.cnblogs.com/fx2008/p/3941908.html poi.jar可以操作的EXcel版本? poi.jar中只能操作97-2003版本的Excel 了解Excel组成: 1.excel文档后缀名.xls结尾 2.excel文档有若干个(小页)组成,小页之间空间,彼此独立 3.每一个【小页】都有自己的名称以及位置 4.每一个【小页】都会包含大量的【单元格】这些单元格是Excel保存数据的基本单元 5.【单元格】{保存数据,坐在行数,所在
挑战者
2018/06/29
5.7K0
poi导出excel动态表头并合并
import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
余生大大
2022/10/25
2K0
poi导出excel动态表头并合并
springSSM 使用poi导出excel(一)
public void exportExcel(HttpServletRequest request,
用户5640963
2019/07/28
5790
Apache POI使用详解[通俗易懂]
开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel
全栈程序员站长
2022/09/14
5K0
Apache POI使用详解[通俗易懂]
用POI实现双层标题excel打印
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
6680
用POI实现双层标题excel打印
Springboot+Poi实现Excel的导入导出
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
默存
2022/06/17
3.3K0
Springboot+Poi实现Excel的导入导出
Java使用 POI 操作Excel
Java中常见的用来操作 Excel 的方式有2种:JXL和POI。JXL只能对 Excel进行操作,且只支持到 Excel 95-2000的版本。而POI是Apache 的开源项目,由Java编写的跨平台 Java API,可操作 Microsoft Office。借助POI,可以方便的生成数据报表,数据批量上传,数据备份等工作。
宋先生
2019/07/18
6K0
Java使用 POI 操作Excel
Java 实现文件批量导入导出最佳实践(兼容xls,xlsx)
java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下。
业余草
2020/07/10
4.1K0
Java 实现文件批量导入导出最佳实践(兼容xls,xlsx)
技术汇总:第一章:使用poi实现表单下载成xls文件并打印
分享链接:https://www.cnblogs.com/gudongcheng/p/8268909.html
Java廖志伟
2022/09/28
2630
技术汇总:第一章:使用poi实现表单下载成xls文件并打印
用SpringMvc实现Excel导出功能
以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下:
JQ实验室
2022/02/09
1.9K0
BufferedWriter导出数据excel文件
以上无非就是创建下面的一个标签(看懂的可以略过),作这一步的目的是可以只导出自己查询出来的列表:
全栈程序员站长
2022/09/01
1.9K0
利用POI组件导出Excel的简单示例
//模拟数据实体类 package excel; import java.util.Date; public class Student { private int id; private String name; private int age; private Date birth; public Student() { } public Student(int id, String name, int age, Date birth) { this.id = id; th
冷冷
2018/02/08
7350
SSM中使用POI实现excel的导入导出
环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi
ZhangXianSheng
2019/05/28
2.8K0
Excel POI设置自适应宽度和poi创建excel表格的代码DEMO,泛型对象T extends OrdeInfoVo赋值
Excel POI设置自适应宽度和poi创建excel表格的代码DEMO,泛型对象T extends OrdeInfoVo赋值
oktokeep
2024/10/09
1370
Excel POI设置自适应宽度和poi创建excel表格的代码DEMO,泛型对象T extends OrdeInfoVo赋值
POI导出Excel
后面一个方法生成的是xlsx格式,03版本的工作簿支持的条数较少,如果数量比较大,可以选择导出xlsx格式的,主要就是导入的jar不同。
河岸飞流
2019/09/11
4K0
爱不释手的Excel导出工具类
最近了不起做的需求中有一个需求是要求导出Excel表格,有大约十几张表需要导出吧。
灬沙师弟
2023/09/29
3460
爱不释手的Excel导出工具类
相关推荐
模板导出Excel
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验