导出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

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

MySQL使用mysqldump导出数据

mysql mysqldump只导出表结构或只导出数据的实现方法 备份数据库: #mysqldump 数据库名 >数据库备份名 #mysqldump -A -u用户名 -p密码 数据库名>数据库备份名 #mysqldump -d -A --add-drop-table -uroot -p >xxx.sql 1.导出结构不导出数据 mysqldump --opt -d 数据库名 -u

一步一步将PlantUML类图导出为自定义格式的XMI文件

一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08PlantUML官网: https://plantuml.com/zh/PlantUML命令行文档: https://plantuml.com/zh/command-line#6a26f548831e6a8cPlantUML XMI文档: https://plantuml.com/zh/xmi

struts2中的json返回指定的多个参数

要返回指定的多个参数,就必须在struts.xml中的配置如下: <action name="goodsType_*" class="goodsTypeAction" method="{1}"> <!-- 查询商品类别信息==分页 --> <result type="json" name="goodsType_findPgae"> <!--在这一行进行指定,其中lis是一个List集合,但

excel翻译软件有哪些?如何高效提翻译?

你是否曾在面对满屏的英文Excel表格时感到头疼?项目报告、数据分析、财务报表... 当这些重要的信息被语言壁垒阻挡时,效率和理解度都会大打折扣。别担心,只需3分钟,我将带你轻松解锁excel翻译成中文的秘籍。 无论是职场新人还是老手,这一技巧都将是你的得力助手,让你在信息的海洋中畅游无阻。 方法一:使用同声传译王软件 同声传译王是一款专业的翻译软件,它支持多种语言翻译,可以excel

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

终于解决了excel操作及cspreadsheet.h问题

困扰多日的excel操作问题终于解决:利用cspreadsheet.h!在vs2005下,不能直接应用cspreadsheet.h,所以必须解决些问题先。 首先, 出现暴多错误。解决UNICODE问题,全部添加L。 [1] +++++++++++++++++++ 其次, 出现问题: error   C2664:   &apos;SQLGetInstalledDriversW &apos;

关于使用cspreadsheet读写EXCEL表格数据的问题

前几天项目有读写EXCEL表格的需求,我就找了大概有几种,大致分为:COM方法、ODBC方法、OLE方法、纯底层格式分析方法。由于COM方法要求必须安装有OFFICE的EXCEL组件,纯底层格式分析方法又很多功能需要自行去完善,所有最终选择了数据库的方法,用数据库的方法去存取xls格式的数据。网上有一个高手写的CSpreedSheet,看了一下提供的接口,感觉挺好用的。在使用的过程中发现几个