位置: IT常识 - 正文

Java之POI导出Excel(二):多个sheet(java 导出excel)

编辑:rootadmin
相信在大部分的web项目中都会有导出导入Excel的需求,之前我也写过一篇导出单个sheet工作表的文章,没看过的小伙伴可以去看哈,链接也给大家放出来了:导出单个sheet 但是在我们日常的工作中,需求往往没这么简单,可能需要将数据按类型分类导出或者数据量过大,需要分多张表导出等等。遇到类似的需求该 ...

推荐整理分享Java之POI导出Excel(二):多个sheet(java 导出excel),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:poi java 导入导出,java poi导出excel,java poi导出excel,java poi导出excel,java poi导出excel,javapoi导出word,poi java 导入导出,poi java 导入导出,内容如对您有帮助,希望把文章链接给更多的朋友!

相信在大部分的web项目中都会有导出导入Excel的需求,之前我也写过一篇导出单个sheet工作表的文章,没看过的小伙伴可以去看哈,链接也给大家放出来了:导出单个sheet

但是在我们日常的工作中,需求往往没这么简单,可能需要将数据按类型分类导出或者数据量过大,需要分多张表导出等等。遇到类似的需求该怎么办呢,别慌,往下看。

一、pom引用

pom文件中,添加以下依赖

查看代码 <!--Excel工具--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version><scope>compile</scope></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version><scope>compile</scope></dependency>二、工具类util

1.ExportSheetUtil

查看代码package com.***.excel;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.ss.usermodel.HorizontalAlignment;import org.apache.poi.ss.usermodel.VerticalAlignment;import org.springframework.http.MediaType;import javax.servlet.http.HttpServletResponse;import java.net.URLEncoder;import java.util.List;/*** @description: excel导出多个sheet工具类* @author: **** @date: 2022/9/15*/public class ExportSheetUtil {/*** 拆解并导出多重Excel*/public static void exportManySheetExcel(String fileName, List<ExcelSheet> mysheets, HttpServletResponse response) {//创建工作薄HSSFWorkbook wb = new HSSFWorkbook();//表头样式HSSFCellStyle style = wb.createCellStyle();// 垂直style.setVerticalAlignment(VerticalAlignment.CENTER);// 水平style.setAlignment(HorizontalAlignment.CENTER);//字体样式HSSFFont fontStyle = wb.createFont();fontStyle.setFontName("微软雅黑");fontStyle.setFontHeightInPoints((short) 12);style.setFont(fontStyle);for (ExcelSheet excel : mysheets) {//新建一个sheet//获取该sheet名称HSSFSheet sheet = wb.createSheet(excel.getFileName());//获取sheet的标题名String[] handers = excel.getHanders();//第一个sheet的第一行为标题HSSFRow rowFirst = sheet.createRow(0);//写标题for (int i = 0; i < handers.length; i++) {//获取第一行的每个单元格HSSFCell cell = rowFirst.createCell(i);//往单元格里写数据cell.setCellValue(handers[i]);//加样式cell.setCellStyle(style);//设置每列的列宽sheet.setColumnWidth(i, 4000);}//写数据集List<String[]> dataset = excel.getDataset();for (int i = 0; i < dataset.size(); i++) {//获取该对象String[] data = dataset.get(i);//创建数据行HSSFRow row = sheet.createRow(i + 1);for (int j = 0; j < data.length; j++) {//设置对应单元格的值row.createCell(j).setCellValue(data[j]);}}}// 下载文件谷歌文件名会乱码,用IEtry {response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "utf-8"));response.setHeader("Cache-Control", "No-cache");response.flushBuffer();wb.write(response.getOutputStream());wb.close();} catch (Exception e) {e.printStackTrace();}}}

2.ExcelSheet

查看代码package com.***.excel;import lombok.Data;import java.util.List;/*** @description: 导出多个sheet表* @author: **** @date: 2022/9/15*/@Datapublic class ExcelSheet {/*** sheet的名称*/private String fileName;/*** sheet里的标题*/private String[] handers;/*** sheet里的数据集*/private List<String[]> dataset;public ExcelSheet(String fileName, String[] handers, List<String[]> dataset) {this.fileName = fileName;this.handers = handers;this.dataset = dataset;}}三、相关业务代码Java之POI导出Excel(二):多个sheet(java 导出excel)

1.service层

/*** 导出开票及运单信息*/ExportInvoiceAndBillVo exportInvoiceAndBillInfo(InvoiceReviewListDto dto);

2.impl实现类

实现类里的代码,需要各位根据自己的业务场景进行改动,无非就是将需要导出的数据先查出来,带入模板中,调用工具类的方法导出。

查看代码package com.***.vo.invoicereview;import lombok.Data;import java.io.Serializable;import java.util.List;/*** @description: 导出开票和运单信息Vo* @author: **** @date: 2022/9/19*/@Datapublic class ExportInvoiceAndBillVo implements Serializable {/*** 开票信息*/private List<String[]> invoiceList;/*** 运单信息*/private List<String[]> billList;}查看代码 @Overridepublic ExportInvoiceAndBillVo exportInvoiceAndBillInfo(InvoiceReviewListDto dto) {ExportInvoiceAndBillVo invoiceAndBill = new ExportInvoiceAndBillVo();// 查询需要导出的开票信息PageInfo<InvoiceReviewListVo> pageInfo = queryInvoiceReviewList(dto);List<InvoiceReviewListVo> invoiceList = pageInfo.getList();if (invoiceList.size() > 10000) {throw new ServiceException("开票数据过多,请分批次导出");}// 查询需要导出的车运运单信息List<Long> invoiceIdList = invoiceList.stream().map(InvoiceReviewListVo::getInvoiceId).collect(Collectors.toList());List<ExportBillVo> billList = getBillInfo(invoiceIdList);if (billList.size() > 10000) {throw new ServiceException("运单数据过多,请分批次导出");}// 将表1 表2的数据 放入定义的对象Vo中invoiceAndBill.setInvoiceList(getInvoiceDataList(invoiceList));invoiceAndBill.setBillList(getBillDataList(billList));return invoiceAndBill;}

3.controller层

controller层的代码需要注意的是:

1.因为导出Excel一般都是通过浏览器进行下载的,所以入参中需要加入HttpServletResponse

2.调用封装的工具类ExportSheetUtil中的exportManySheetExcel方法就可以了

3.表头和表名需要各位根据自身的业务场景修改哈

查看代码 /*** 导出开票和运单信息*/@Log@PostMapping("/exportInvoiceAndBillInfo")public void exportInvoiceAndBillInfo(@RequestBody InvoiceReviewListDto dto, HttpServletResponse response) {ExportInvoiceAndBillVo invoiceAndBillVo = invoiceFacadeService.exportInvoiceAndBillInfo(dto);//设置sheet的表头与表名String[] invoiceSheetHead = {"开票编号", "票号", "公司名称", "收票方名称", "结算类型", "纳税识别码", "收票联系人", "联系人电话", "运单总金额(元)", "含税总金额(元)", "开票状态", "提交开票时间", "运营审核时间", "运营审核人", "财务审核时间", "财务审核人", "开票完成时间", "冲销操作人", "冲销时间"};String[] billSheetHead = {"开票编号", "运单号", "发货地", "收货地", "司机", "司机电话", "货物名称", "货物数量", "单位", "货物重量(吨)", "运单状态", "运单金额(元)", "含税金额(元)"};ExcelSheet invoiceExcel = new ExcelSheet("开票信息", invoiceSheetHead, invoiceAndBillVo.getInvoiceList());ExcelSheet billExcel = new ExcelSheet("运单信息", billSheetHead, invoiceAndBillVo.getBillList());List<ExcelSheet> mysheet = new ArrayList<>();mysheet.add(invoiceExcel);mysheet.add(billExcel);ExportSheetUtil.exportManySheetExcel("开票及运单信息", mysheet, response);}

最终导出的Excel文件:

本文链接地址:https://www.jiuchutong.com/zhishi/309310.html 转载请保留说明!

上一篇:python判断字符串函数的归纳(python判断字符串为字母)

下一篇:Dubbo源码(九) - 服务调用过程(dubbo 实现原理)

  • 三类团购营销16种经典方法大集锦!(团购营销方案)

    三类团购营销16种经典方法大集锦!(团购营销方案)

  • 电脑显示正在撤销对计算机所做的更改(电脑显示正在撤销更改一直转圈)

    电脑显示正在撤销对计算机所做的更改(电脑显示正在撤销更改一直转圈)

  • 拼多多店铺等级lv3(拼多多店铺等级三级)

    拼多多店铺等级lv3(拼多多店铺等级三级)

  • 对方加你微信过期了怎么办(对方加微信过来还没认证不小心删了丛那里找回来)

    对方加你微信过期了怎么办(对方加微信过来还没认证不小心删了丛那里找回来)

  • ipad ipadair ipadpro的区别(ipad ipadair ipadpro买哪个)

    ipad ipadair ipadpro的区别(ipad ipadair ipadpro买哪个)

  • 华为手机位置权限在哪里打开(华为手机位置权限访问记录怎么删除)

    华为手机位置权限在哪里打开(华为手机位置权限访问记录怎么删除)

  • pid绑定是什么意思(pid号是什么)

    pid绑定是什么意思(pid号是什么)

  • 华为p40怎么开热点(华为P40怎么开热点链接)

    华为p40怎么开热点(华为P40怎么开热点链接)

  • png格式用什么打开(png什么图片格式)

    png格式用什么打开(png什么图片格式)

  • 操作过于频繁,请稍后再试(操作过于频繁不能自助解冻)

    操作过于频繁,请稍后再试(操作过于频繁不能自助解冻)

  • 时序逻辑电路有哪些结构特点?(时序逻辑电路有记忆吗)

    时序逻辑电路有哪些结构特点?(时序逻辑电路有记忆吗)

  • 华为手机删除的app怎么找回来(华为手机删除的信息怎样才能找回来)

    华为手机删除的app怎么找回来(华为手机删除的信息怎样才能找回来)

  • 微信朋友验证操作过于频繁怎么办(微信上朋友验证)

    微信朋友验证操作过于频繁怎么办(微信上朋友验证)

  • ps通道在哪里打开

    ps通道在哪里打开

  • 怎么关闭appleid建议(怎么关闭appleid建议 一直提示)

    怎么关闭appleid建议(怎么关闭appleid建议 一直提示)

  • 天猫精灵可以不插电吗(天猫精灵可以不联网使用吗)

    天猫精灵可以不插电吗(天猫精灵可以不联网使用吗)

  • 苹果手机优化电池充电的是什么意思(苹果手机优化电池是开着好还是关着好)

    苹果手机优化电池充电的是什么意思(苹果手机优化电池是开着好还是关着好)

  • 苹果合约机什么意思啊(苹果合约机什么意思啊能装几个卡)

    苹果合约机什么意思啊(苹果合约机什么意思啊能装几个卡)

  • 网络安全的基本属性是(网络安全的基本属性有哪些)

    网络安全的基本属性是(网络安全的基本属性有哪些)

  • 微信如何打出doge表情(微信如何打出带圆圈11)

    微信如何打出doge表情(微信如何打出带圆圈11)

  • 三星s7支持应用分身吗(三星s7的应用锁在哪里设置)

    三星s7支持应用分身吗(三星s7的应用锁在哪里设置)

  • 苹果手机排线坏了的症状(苹果手机排线坏了会出现什么情况)

    苹果手机排线坏了的症状(苹果手机排线坏了会出现什么情况)

  • win10显示后解压文件损坏怎么办(window10解压)

    win10显示后解压文件损坏怎么办(window10解压)

  • 3D相机获取点云信息的几种方法(3d点云处理算法)

    3D相机获取点云信息的几种方法(3d点云处理算法)

  • 【Javaweb学习笔记】在Eclipse中创建Web项目(javaweb总结笔记)

    【Javaweb学习笔记】在Eclipse中创建Web项目(javaweb总结笔记)

  • 全国增值税发票服务平台
  • 印花税应税凭证书立日期怎么写
  • 附加税申报表里怎么填写
  • 企业所得税成本没有发票怎么处理
  • 企业所得税能不能删除重新报
  • 出口退税增值税账务处理
  • 营业外支出罚款所得税怎么处理
  • 所得税季报什么时间扣款
  • 连锁店每个店都要独立核算吗
  • 所得税二季度可以先少缴吗
  • 甲供材能否开具增值税专用发票
  • 公司刚注册之后怎么办
  • 个人购买商业保险怎么抵扣个税
  • 公司股份无偿转让怎么办理流程
  • 养殖企业如何做销售
  • 延期申报预缴税款比例
  • 预收账款有余额是啥原因
  • 收到货款未开发票怎么做分录
  • 可供出售金融资产改为什么科目
  • 已认证未付款分录
  • 专项拨款形成的固定资产递延收益
  • 印花税资产划转
  • 违约金 罚款
  • 以前年度损益调整结转到哪里
  • 补缴企业所得税汇算清缴会计分录怎么做
  • 如何防止虚开发票 等舞弊行为?
  • 如何理解消费税的作用
  • 仓库间的调拨流程
  • 间接补贴主要包括
  • 小规模纳税企业所得税优惠政策
  • 个体工商户给员工交社保属于职工社保吗
  • 无u刷bios一直闪
  • qq登录界面的设计与实现
  • 小规模发票一般怎么开
  • 应交税金的含义
  • 消费税的计税方法有
  • win11怎么桌面快捷方式
  • 联想thinkpad l380yoga
  • wordpress建网站详细教程
  • vue叠化在哪里
  • 消耗品算什么科目
  • chatcters
  • javascript基础书
  • php使用for循环实现乘法口诀表
  • php获取用户信息
  • 微擎框架安装教程
  • 资产减值损失结转到哪里
  • 合作公司投资方式
  • 报销具体流程
  • 征收率有几种
  • 计提折旧会计分录例题
  • 帝国cms栏目自定义字段
  • 织梦安装完要删除哪个文件
  • 国债 企业
  • 普通动产和特殊动产物权变动
  • 企业所得税的营业收入怎么填
  • 建筑工程租赁费属于什么费用
  • 可明确区分的商品什么意思
  • 先开票后出库会计处理
  • 实缴制下未到位资金
  • 固定资产抵扣比例
  • 销售不动产计税税率
  • 公益救济性捐赠应计入的会计科目是
  • win8如何使用
  • linux连接ssr
  • mac购买建议
  • service.exe是什么
  • linux怎么用shell
  • window7激活系统
  • 原生js实现路由
  • pygame csdn
  • 学习雷锋好榜样
  • shell变量作用范围
  • 浅谈编码,解码的意义
  • javascript 日期运算
  • android studio 安装步骤
  • 税务局上班吗今天
  • 电子税务局领取纸质发票的步骤
  • 甘肃增值税发票查验平台官网
  • 重庆电子税务局怎么绑定办税人员
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设