导出excel多个sheet 并压缩

2024-05-26 13:08
文章标签 excel 导出 压缩 多个 sheet

本文主要是介绍导出excel多个sheet 并压缩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

创建sheet工具类:

package org.deyi.np.util;import java.util.ArrayList;
import java.util.HashMap;/*** @Description: 存放生成sheet所需要的数据信息* @Title: ExcelGenerate.java* @Package excelwrite* @author  LiQ * @date 2018-1-17 下午4:39:08* @version V1.0  
*/
public class SheetInfo{private String sheetName; //sheet名称,默认为Sheet1private ArrayList<String> fieldName; //excel标题头private ArrayList<String> columnName; //数据字段名称,根据名称从map中取值private ArrayList<HashMap<String,Object>> fieldData; //excel数据内容/*** sheet名称 。* @return * @createDate 2018-1-17 下午4:57:04 (创建时间)* @author LiQ (作者)*/public String getSheetName() {return sheetName;}public void setSheetName(String sheetName) {this.sheetName = sheetName;}/*** excel标题头 。* @return * @createDate 2018-1-17 下午4:56:04 (创建时间)* @author LiQ (作者)*/public ArrayList<String> getFieldName() {return fieldName;}public void setFieldName(ArrayList<String> fieldName) {this.fieldName = fieldName;}/*** 数据字段名称,根据名称从map中取值 。* @return * @createDate 2018-1-17 下午4:56:10 (创建时间)* @author LiQ (作者)*/public ArrayList<String> getColumnName() {return columnName;}public void setColumnName(ArrayList<String> columnName) {this.columnName = columnName;}/*** excel数据内容 。* @return * @createDate 2018-1-17 下午4:56:17 (创建时间)* @author LiQ (作者)*/public ArrayList<HashMap<String, Object>> getFieldData() {return fieldData;}public void setFieldData(ArrayList<HashMap<String, Object>> fieldData) {this.fieldData = fieldData;}/*** 生成sheet所需要的数据信息,sheetName默认为Sheet1,默认创建第一个sheet* @param fieldName excel标题头* @param columnName 数据字段名称,根据名称从map中取值* @param fieldData excel数据内容* @return* @throws*/public SheetInfo(ArrayList<String> fieldName, ArrayList<String> columnName, ArrayList<HashMap<String, Object>> fieldData) {this.fieldName = fieldName;this.columnName = columnName;this.fieldData = fieldData;}/*** 生成sheet所需要的数据信息,默认创建第一个sheet* @param sheetName sheet名称* @param fieldName excel标题头* @param columnName 数据字段名称,根据名称从map中取值* @param fieldData excel数据内容* @return* @throws*/public SheetInfo(String sheetName, ArrayList<String> fieldName, ArrayList<String> columnName, ArrayList<HashMap<String, Object>> fieldData) {this.sheetName = sheetName;this.fieldName = fieldName;this.columnName = columnName;this.fieldData = fieldData;}
}

创建 ExcelFile :

package org.deyi.np.util;import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;public class ExcelFileGenerator {private List<SheetInfo>  sheetInfoList;private HSSFWorkbook workBook = null;/*** 构造器* @param fieldName 结果集的字段名* @param data*/public ExcelFileGenerator(List<SheetInfo>  sheetInfoList) {this.sheetInfoList = sheetInfoList;workBook = new HSSFWorkbook();//创建一个工作薄对象}/*** 构造器* @param fieldName 结果集的字段名* @param data*/public ExcelFileGenerator(SheetInfo  sheetInfo) {ArrayList<SheetInfo> arrayList = new ArrayList<SheetInfo>();arrayList.add(sheetInfo);this.sheetInfoList = arrayList;workBook = new HSSFWorkbook();//创建一个工作薄对象}/*** 创建HSSFWorkbook对象* @return HSSFWorkbook*/public HSSFWorkbook writeSheetInfo() {for (int i = 0; i < sheetInfoList.size(); i++) {SheetInfo sheetInfo = sheetInfoList.get(i);HSSFSheet sheet = sheetInfo.getSheetName()==null?workBook.createSheet():workBook.createSheet(sheetInfo.getSheetName());//使用workbook对象创建sheet对象HSSFRow headRow = sheet.createRow((short) 0); //创建行,0表示第一行(本例是excel的标题)ArrayList<String> fieldName = sheetInfo.getFieldName();for (int j = 0; j < fieldName.size(); j++) {//循环excel的标题HSSFCell cell = headRow.createCell( j);//使用行对象创建列对象,0表示第1列/**************对标题添加样式begin********************///设置列的宽度/sheet.setColumnWidth(j, 6000);HSSFCellStyle cellStyle = workBook.createCellStyle();//创建列的样式对象HSSFFont font = workBook.createFont();//创建字体对象//字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//字体颜色变红font.setColor(HSSFColor.BLACK.index);//如果font中存在设置后的字体,并放置到cellStyle对象中,此时该单元格中就具有了样式字体cellStyle.setFont(font);/**************对标题添加样式end********************///添加样式cell.setCellType(HSSFCell.CELL_TYPE_STRING);if(fieldName.get(j) != null){//将创建好的样式放置到对应的单元格中cell.setCellStyle(cellStyle);cell.setCellValue((String) fieldName.get(j));//为标题中的单元格设置值}else{cell.setCellValue("-");}}ArrayList<HashMap<String, Object>> fieldData = sheetInfo.getFieldData();int rows = fieldData.size();//总的记录数ArrayList<String> columnName = sheetInfo.getColumnName();//分页处理excel的数据,遍历所有的结果for (int k = 0; k < rows; k++) {HSSFRow row = sheet.createRow((short) (k + 1));//创建1行//分页处理,获取每页的结果集,并将数据内容放入excel单元格HashMap<String,Object> rowMap = (HashMap<String,Object>) fieldData.get(k);for (int n = 0; n < columnName.size(); n++) {//遍历某一行的结果Object value = rowMap.get(columnName.get(n));HSSFCell cell = row.createCell( n);//使用行创建列对象if(value != null){cell.setCellValue((String) value.toString());}else{cell.setCellValue("");}}}}return workBook;}public void expordExcel(OutputStream os) throws Exception {workBook = writeSheetInfo();workBook.write(os);//将excel中的数据写到输出流中,用于文件的输出os.flush();							//刷新缓冲区os.close();}/*** 数据测试 。* @param args * @createDate 2018-1-17 下午5:26:45 (创建时间)* @author LiQ (作者)*/public static void main(String[] args) {//============造数据===============ArrayList<String> fieldName = new ArrayList<String>();ArrayList<String> columnName = new ArrayList<String>();ArrayList<HashMap<String, Object>> fieldData = new ArrayList<HashMap<String,Object>>();for(int i=0;i<10;i++){fieldName.add("标题:"+i);columnName.add("column"+i);HashMap<String, Object> map = new HashMap<String, Object>();for(int j=0;j<10;j++){map.put("column"+j, "value:"+i+"vj:"+j);}fieldData.add(map);}SheetInfo sheetInfo = new SheetInfo(fieldName, columnName, fieldData);System.out.println("hhhh----------------------");//============造数据===============File file = new File("C:\\Users\\LiQ\\Desktop\\qqqq.xls");OutputStream op;try {op = new FileOutputStream(file);ExcelFileGenerator efg = new ExcelFileGenerator(sheetInfo);efg.expordExcel(op);System.out.println("aaaa----------------------");} catch (Exception e) {e.printStackTrace();}}}

将生成的文件压缩成zip:

public void downLoad(HashMap<String, Object> condition, HttpServletResponse response) {ZipOutputStream zos = null;
List<ArrayList<HSSFWorkbook>> zipList = new ArrayList<ArrayList<HSSFWorkbook>>();HSSFWorkbook workbook = new HSSFWorkbook();
ArrayList<HashMap<String, Object>> list13 = bloodMetabolismDao.selectDownLoadList(patientId);ArrayList<String> fieldName13 = new ArrayList<String>();fieldName13.add("是否异常");fieldName13.add("血代谢检查日期");fieldName13.add("血代谢异常描述");fieldName13.add("创建时间");ArrayList<String> columnName13 = new ArrayList<String>();columnName13.add("hasRegess");columnName13.add("bloodMetabolismCheckDate");columnName13.add("bloodMetabolismDescribe");columnName13.add("maketime");SheetInfo sheetInfo18 = new SheetInfo("基本信息",fieldName, columnName, patientList);SheetInfo sheetInfo19 = new SheetInfo("血代谢",fieldName13, columnName13, list13);listInfo6.add(sheetInfo18);listInfo6.add(sheetInfo19);//============血代谢 end =======================//============尿代谢 begin =======================ArrayList<HashMap<String, Object>> list14 = urinaryMetabolismDao.selectDownLoadList(patientId);ArrayList<String> fieldName14 = new ArrayList<String>();fieldName14.add("尿代谢检查日期");fieldName14.add("是否异常");fieldName14.add("尿代谢异常描述");fieldName14.add("创建时间");ArrayList<String> columnName14 = new ArrayList<String>();columnName14.add("urinaryMetabolismCheckDate");columnName14.add("hasRegess");columnName14.add("urinaryMetabolismDescribe");columnName14.add("maketime");SheetInfo sheetInfo20 = new SheetInfo("尿代谢",fieldName14, columnName14, list14);listInfo6.add(sheetInfo20);//============尿代谢 end =======================//============乳酸水平 begin=======================ArrayList<HashMap<String, Object>> list15 = lacticAcidLevelDao.selectDownLoadList(patientId);ArrayList<String> fieldName15 = new ArrayList<String>();fieldName15.add("乳酸水平检查日期");fieldName15.add("乳酸水平标本类型");fieldName15.add("乳酸水平情况");fieldName15.add("创建时间");ArrayList<String> columnName15 = new ArrayList<String>();columnName15.add("lacticAcidLevelCheckDate");columnName15.add("lacticAcidLevelSpecimenType");columnName15.add("lacticAcidLevelDescribe");columnName15.add("maketime");SheetInfo sheetInfo21 = new SheetInfo("乳酸水平",fieldName15, columnName15, list15);listInfo6.add(sheetInfo21);//============乳酸水平  end =======================//============血生化  begin =======================ArrayList<HashMap<String, Object>> list16 = bloodBiochemistryDao.selectDownLoadList(patientId);ArrayList<String> fieldName16 = new ArrayList<String>();fieldName16.add("血生化检查日期");fieldName16.add("血生化是否异常");fieldName16.add("血生化异常描述");fieldName16.add("创建时间");ArrayList<String> columnName16 = new ArrayList<String>();columnName16.add("bloodBiochemistryCheckDate");columnName16.add("hasRegerss");columnName16.add("bloodBiochemistryDescribe");columnName16.add("maketime");SheetInfo sheetInfo22 = new SheetInfo("血生化",fieldName16, columnName16, list16);listInfo6.add(sheetInfo22);//============血生化  end =======================//============血同型半胱氨酸 begin =======================ArrayList<HashMap<String, Object>> list17 = homocysteineDao.selectDownLoadList(patientId);ArrayList<String> fieldName17 = new ArrayList<String>();fieldName17.add("血同型半胱氨酸检查日期");fieldName17.add("血同型半胱氨酸是否异常");fieldName17.add("血同型半胱氨酸异常描述");fieldName17.add("创建时间");ArrayList<String> columnName17 = new ArrayList<String>();columnName17.add("homocysteineCheckDate");columnName17.add("hasRegerss");columnName17.add("homocysteineDescribe");columnName17.add("maketime");SheetInfo sheetInfo23 = new SheetInfo("血同型半胱氨酸",fieldName17, columnName17, list17);listInfo6.add(sheetInfo23);//============血同型半胱氨酸  end =======================//============血氨 begin =======================ArrayList<HashMap<String, Object>> list18 = bloodAmmoniaDao.selectDownLoadList(patientId);ArrayList<String> fieldName18 = new ArrayList<String>();fieldName18.add("血氨检查日期");fieldName18.add("血氨是否异常");fieldName18.add("血氨是否异常描述");fieldName18.add("创建时间");ArrayList<String> columnName18 = new ArrayList<String>();columnName18.add("bloodAmmoniaCheckDate");columnName18.add("hasRegerss");columnName18.add("bloodAmmoniaDescribe");columnName18.add("maketime");SheetInfo sheetInfo24 = new SheetInfo("血氨",fieldName18, columnName18, list18);listInfo6.add(sheetInfo24);//============血氨  end =======================//============其他相关生化检查  begin=======================ArrayList<HashMap<String, Object>> list19 = otherBiochemicalExaminationDao.selectDownLoadList(patientId);ArrayList<String> fieldName19 = new ArrayList<String>();fieldName19.add("其他相关生化检查日期");fieldName19.add("其他相关生化检查是否异常");fieldName19.add("其他相关生化检查异常描述");fieldName19.add("创建时间");ArrayList<String> columnName19 = new ArrayList<String>();columnName19.add("otherBiochemicalExaminationCheckDate");columnName19.add("hasRegerss");columnName19.add("otherBiochemicalExaminationDescribe");columnName19.add("maketime");SheetInfo sheetInfo25 = new SheetInfo("其他相关生化检查",fieldName19, columnName19, list19);listInfo6.add(sheetInfo25);//============其他相关生化检查  end =======================ExcelFileGenerator efg = new ExcelFileGenerator(listInfo6);workbook = efg.writeSheetInfo();ArrayList<HSSFWorkbook> wbList6 = new ArrayList<HSSFWorkbook>();wbList6.add(workbook);zipList.add(wbList6);//下载显示的文件名,解决文件乱码问题String fileName=patientList.get(0).get("patientName").toString()+"_"+System.currentTimeMillis() + ".zip";try {fileName = new String(fileName.getBytes("utf-8"),"iso-8859-1");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}try {OutputStream os = response.getOutputStream();zos = new ZipOutputStream(os);response.setContentType("application/force-download;charset=UTF-8");// 设置强制下载不打开response.addHeader("Content-Disposition","attachment;fileName=" + fileName);// 设置文件名for (int i = 0; i < zipList.size(); i++) {for (Iterator iterator = zipList.get(i).iterator(); iterator.hasNext();) {HSSFWorkbook hssfWorkbook = (HSSFWorkbook) iterator.next();//创建ZIP实体,并添加进压缩包  ZipEntry zipEntry = new ZipEntry(nameList.get(i)+".xls");  zos.putNextEntry(zipEntry);  hssfWorkbook.write(zos);}}} catch (Exception e) {e.printStackTrace();} finally{  //关闭流  try {  if(null != zos) zos.close();  } catch (IOException e) {  e.printStackTrace();  throw new RuntimeException(e);  }  }
}

这篇关于导出excel多个sheet 并压缩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004557

相关文章

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON: