位置: 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 实现原理)

  • 腾讯视频怎么扫二维码登录别人的会员(腾讯视频怎么扫微信二维码登录)

    腾讯视频怎么扫二维码登录别人的会员(腾讯视频怎么扫微信二维码登录)

  • 网关是什么意思(从网关和盲网关是什么意思)

    网关是什么意思(从网关和盲网关是什么意思)

  • 苹果xr人像模式怎么用(苹果xr人像模式没有舞台光)

    苹果xr人像模式怎么用(苹果xr人像模式没有舞台光)

  • 迅雷检测到磁盘过于繁忙(迅雷检测到磁盘错误)

    迅雷检测到磁盘过于繁忙(迅雷检测到磁盘错误)

  • 小米手机相机图标没了怎么办(小米手机相机图标不见了)

    小米手机相机图标没了怎么办(小米手机相机图标不见了)

  • 探探主播等级(探探主播等级表和价格)

    探探主播等级(探探主播等级表和价格)

  • usb线是充电线吗(usb电源线是不是就是充电器)

    usb线是充电线吗(usb电源线是不是就是充电器)

  • 微信收款二维码怎么打印(微信收款二维码怎么弄到手机桌面)

    微信收款二维码怎么打印(微信收款二维码怎么弄到手机桌面)

  • 路由器wmm什么意思(路由器中wmm开启是干什么用的)

    路由器wmm什么意思(路由器中wmm开启是干什么用的)

  • 联想预装office是永久的吗(联想预装office是什么)

    联想预装office是永久的吗(联想预装office是什么)

  • 拼多多怎么换货(拼多多怎么换货申请)

    拼多多怎么换货(拼多多怎么换货申请)

  • 被拉黑能不能收到短信(被拉黑能不能收转账)

    被拉黑能不能收到短信(被拉黑能不能收转账)

  • 小米10pro发布时间(小米10pro发布时间和上市时间)

    小米10pro发布时间(小米10pro发布时间和上市时间)

  • 计算机网络系统是由什么组成的(计算机网络系统按其覆盖范围可分成三类)

    计算机网络系统是由什么组成的(计算机网络系统按其覆盖范围可分成三类)

  • i5-8250u是什么性能(i5-8250u属于什么水平)

    i5-8250u是什么性能(i5-8250u属于什么水平)

  • 微信聊天记录不删除能保存多久(微信聊天记录不显示怎么设置)

    微信聊天记录不删除能保存多久(微信聊天记录不显示怎么设置)

  • 手机内存越来越小怎么处理(手机内存越来越大是怎么回事)

    手机内存越来越小怎么处理(手机内存越来越大是怎么回事)

  • 微机工作的基本原理(微机工作过程的实质是什么)

    微机工作的基本原理(微机工作过程的实质是什么)

  • 红米note8怎么导入联系人(红米note8pro怎么导入联系人)

    红米note8怎么导入联系人(红米note8pro怎么导入联系人)

  • 淘宝账号更换实名认证(淘宝账号更换实名认证,淘宝号的等级就没了)

    淘宝账号更换实名认证(淘宝账号更换实名认证,淘宝号的等级就没了)

  • vue字幕字体怎么改(vue字幕怎么改变大小)

    vue字幕字体怎么改(vue字幕怎么改变大小)

  • 什么叫rgb风扇(什么是rgb风扇)

    什么叫rgb风扇(什么是rgb风扇)

  • 怎样将ipad连接投影仪(怎样将ipad连接的wifi分享出去)

    怎样将ipad连接投影仪(怎样将ipad连接的wifi分享出去)

  • 三星s10 有内置红外线嘛(三星s10内置壁纸原图无损)

    三星s10 有内置红外线嘛(三星s10内置壁纸原图无损)

  • 微信漂流瓶何时重新上线(微信漂流瓶什么时候没的)

    微信漂流瓶何时重新上线(微信漂流瓶什么时候没的)

  • 猛犸充电 充满了自动断电么(猛犸充电充满会自己停嘛会退款吗)

    猛犸充电 充满了自动断电么(猛犸充电充满会自己停嘛会退款吗)

  • 苹果x定时开关机在哪里(苹果x定时开关在哪里)

    苹果x定时开关机在哪里(苹果x定时开关在哪里)

  • tgp远跳怎么设置

    tgp远跳怎么设置

  • 苹果srir怎么语音打开(苹果手机siri怎么用语音对话)

    苹果srir怎么语音打开(苹果手机siri怎么用语音对话)

  • 将在MAC电脑屏幕上的操作录制下来制成Gif格式动画(macbook直接显示桌面)

    将在MAC电脑屏幕上的操作录制下来制成Gif格式动画(macbook直接显示桌面)

  • 一次性购入固定资产投资收益
  • 主营业务收入科目按其所反映的经济内容不同
  • 小规模企业申报时间
  • 医疗服务有增值业务吗
  • 一次性发放年终奖怎么税务筹划
  • 返点的保险费应计入哪里
  • 报价含税和不含税哪个划算
  • 个体工商户增值税申报操作流程
  • 电子记账软件出纳帐
  • 没有发票不能税前扣除,所以年底结账前需要检查
  • 担保人的损失
  • 上个月普通发票怎么作废
  • 固定资产的确认条件是什么
  • 自产产品用于捐赠的会计处理
  • 折价购入
  • 营改增后,房地产开发项目预售价如何申报
  • 上海房产税如何退税
  • 维护服务合同可不可以一直续签
  • 销项在借方还是贷方
  • 怎么查询发票记录
  • 滴滴行程单修改后是否能查
  • 个人所得税核定征收税率是多少
  • 进项税额转出期限是多久
  • 普通合伙企业个税怎么算
  • 投资基金是什么科目
  • 公司全额承担个税会计分录
  • 上月未结账
  • 计提个人社保会计分录实操
  • 如何停止win11
  • 免费样品销售给客户怎么入账
  • ffmpeg安装教程linux
  • 关于怀孕在线咨询
  • mac怎么共享文件
  • 跨年销货退回账务处理
  • php转word
  • 新手最适合用哪一款
  • fg726p.exe
  • 购买性支出和转移性支出都计入GDP
  • 孚日山脉猞猁
  • php常用数组函数和用法
  • 明细分类账户定义
  • 股权置换和股权转让
  • yii2实现根据时间搜索的方法
  • 小规模纳税人的增值税账务处理
  • 消费税会计分录怎么做的
  • 搭建本地http服务器
  • php怎么上传图片并保存到数据库
  • 正则动量
  • 高新技术企业相关税收政策
  • 报关单填写要求怎么填
  • mysql 自动断开
  • 企业不计提固定资产损失
  • 应收预收应付预付科目怎么合并
  • 会计年度对账
  • mssqlserver怎么用
  • 以前年度损益科目编码
  • 行政转工会经费请示
  • 收到银行季度结转怎么做
  • 新单位成立需要做什么工作
  • 工程施工间接费用明细
  • 会计账本怎么记账
  • 非常详细的魔方公式图解
  • mysql分页性能
  • 微软官方重做系统
  • mac截图清晰度设置方法
  • win10如何添加蓝牙驱动
  • windows没有
  • 如何不让qq开机自启
  • linux getuid
  • win10如何创建一个新的用户
  • node.js连接数据库的代码
  • python scrapy爬虫
  • srslte源码分析
  • json查询语句
  • 微信开发微信开发
  • html复选框和单选框区别在哪
  • js缩小图片尺寸
  • 贵州税务机关
  • 小微企业不交所得税
  • 纳税服务的背景是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设