java poi zip_Java 批量下载excel,并对excel赋值,压缩为zip文件(POI版)

package com.neusoft.nda.servlet;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Arrays;

import java.util.Calendar;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;

import org.apache.commons.lang.StringUtils;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

import com.neusoft.nda.electronicrecord.service.MediaFileServlet;

import com.neusoft.nda.objectutils.utils.ObjectUtil;

import com.neusoft.nda.om.constants.ActionTypeConst;

import com.neusoft.nda.om.manager.IContainer;

import com.neusoft.nda.om.manager.IObjectManager;

import com.neusoft.nda.om.manager.ObjectManagerFactory;

import com.neusoft.nda.om.manager.dto.OMContextDTO;

import com.neusoft.nda.persistence.dataoperator.dto.ObjectDTO;

import com.neusoft.nda.utils.utils.ToolsUtil;

public class BeiKaoServlet extends HttpServlet{

/**

*

*/

private static final long serialVersionUID = -1166903384923406516L;

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

downloadMulti(req, resp);

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doPost(req, resp);

}

private void writeExcel(String finalXlsxPath,String id,String tempPath){

//注释掉了我的业务逻辑,下面只是对单元格的操作

//单元格如果没创建,则代码里创建createCell,如果已经创建,代码里改成getCell

File finalXlsxFile = createNewFile(finalXlsxPath);//复制模板,

Workbook workBook = null;

try {

workBook = getWorkbok(finalXlsxFile);

} catch (IOException e1) {

e1.printStackTrace();

}

Sheet sheet = workBook.getSheetAt(0);

workBook.createCellStyle().setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中

workBook.createCellStyle().setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中

//sheet 第一页

Row row1= sheet.getRow(2);

Cell c1=row1.getCell(6);

c1.setCellValue("");//3行7列

//sheet 第2页

Sheet sheet2 = workBook.getSheetAt(1);

HSSFFont font1 = (HSSFFont) workBook.createFont();

font1.setFontName("宋体");

font1.setFontHeightInPoints((short) 10);//设置字体大小

HSSFCellStyle cellStyle1 = (HSSFCellStyle) workBook.createCellStyle(); //卷内样式

cellStyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中

cellStyle1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中

cellStyle1.setFont(font1);//宋体10号

cellStyle1.setWrapText(true);

cellStyle1.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框

cellStyle1.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框

cellStyle1.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框

cellStyle1.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

//从4行开始

Row rowsheet4= sheet2.createRow(k+3);

rowsheet4.setHeight((short) (42*20));//行高

Cell csheet=rowsheet4.createCell(0);//序号

csheet.setCellValue("");

csheet.setCellStyle(cellStyle1);

//封面  sheet3

Sheet sheet3 = workBook.getSheetAt(2);

//样式

HSSFCellStyle cellStyle=(HSSFCellStyle) workBook.createCellStyle();

cellStyle.setWrapText(true); //自动换行

HSSFFont font = (HSSFFont) workBook.createFont();

font.setFontName("宋体");

font.setFontHeightInPoints((short) 12);//设置字体大小

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示

cellStyle.setFont(font);

cellStyle.setIndention((short) 2);//缩进2

cellStyle.setAlignment(CellStyle.ALIGN_LEFT);//靠左

Row rowsheet62= sheet3.getRow(5);

Cell csheet62=rowsheet62.getCell(1);

csheet62.setCellValue("");//

csheet62.setCellStyle(cellStyle);//自动换行

FileOutputStream out = null;

try {

out = new FileOutputStream(tempPath + File.separator + oto1.getBean().getString("DH")+".xls");

} catch (FileNotFoundException e2) {

e2.printStackTrace();

}

try {

workBook.write(out);

} catch (IOException e1) {

e1.printStackTrace();

}

try {

if (out != null) {

out.flush();

out.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 判断excel格式版本

*

* @param file

* @return

* @throws IOException

*/

private Workbook getWorkbok(File file) throws IOException {

Workbook wb = null;

FileInputStream in = new FileInputStream(file);

if (file.getName().endsWith(".xls")) { // Excel 2003

wb = new HSSFWorkbook(in);

} else if (file.getName().endsWith("xlsx")) { // Excel 2007/2010

wb = new XSSFWorkbook(in);

}

return wb;

}

private File createNewFile(String path) {

// 读取模板,并赋值到新文件************************************************************

// 文件模板路径

File file = new File(path);

if (!file.exists()) {

System.out.println("原模板文件不存在");

}

// 保存文件的路径

String realPath = file.getParent();

// 新的文件名

String newFileName =System.currentTimeMillis()+ ".xls";

// 判断路径是否存在

File dir = new File(realPath);

if (!dir.exists()) {

dir.mkdirs();

}

// 写入到新的excel

File newFile = new File(realPath, newFileName);

try {

newFile.createNewFile();

// 复制模板到新文件

FileUtils.copyFile(file, newFile);

} catch (Exception e) {

e.printStackTrace();

}

return newFile;

}

/**

*

*

下载多个文件

*

* @comment[注释说明]

* @authoryu-b, 2013-1-9

* @sinceNDAS 2.0

*

* @param request

* @param response

* @throws IOException

*/

private void downloadMulti(HttpServletRequest request,

HttpServletResponse response) throws IOException

{

String sourcePath = getServletContext().getRealPath("/WEB-INF/")

+ "/conf/ExcelModel/beikao.xls"; // 读取Excel文档      //用自己本地的路径

String id = request.getParameter("id");

String[] idsArr = id.split("_");

List ids = Arrays.asList(idsArr);

// 下载文件名

String downFileName = "download.zip";

// 生成缓存文件夹名

String sesstionId = request.getSession().getId();

String tempPath = ToolsUtil.getRealPath("platform" + File.separator

+ "seasplatform" + File.separator

+ sesstionId + File.separator + Calendar.getInstance().getTimeInMillis());

File tempFile = new File(tempPath);

if (!tempFile.exists())

{

tempFile.mkdirs();

}

OutputStream respOut = response.getOutputStream();

response.setCharacterEncoding("utf-8");

response.setHeader("Content-Disposition", "attachment; filename=\""

+ new String(downFileName.getBytes(), "ISO-8859-1") + "\"");// 解决中文乱码问题

// 设置响应头和下载保存的文件名

String mimeType = null;

mimeType = this.getServletContext().getMimeType("zip");

if (StringUtils.isEmpty(mimeType))

{

mimeType = "APPLICATION/OCTET-STREAM";

}

response.setContentType(mimeType);

for(String objectId : ids)

{

writeExcel(sourcePath, objectId, tempPath);

}

creasteZip(new File(tempPath), respOut);

try

{

deleteFile(new File(tempPath));

respOut.flush();

respOut.close();

}

catch (IOException ex)

{

ex.printStackTrace();

}

}

/**

* 递归删除文件夹

*

* @param file

* @return void

*/

private void deleteFile(File file)

{

if (file.exists())

{// 判断文件是否存在

if (file.isFile())

{// 判断是否是文件

file.delete();// 删除文件

}

else if (file.isDirectory())

{// 否则如果它是一个目录

File[] files = file.listFiles();// 声明目录下所有的文件 files[];

for (int i = 0; i < files.length; i++)

{// 遍历目录下所有的文件

deleteFile(files[i]);// 把每个文件用这个方法进行迭代

}

file.delete();// 删除文件夹

}

}

else

{

System.out.println("所删除的文件不存在");

}

}

/**

* 压缩文件或者文件目录到指定的zip或者rar包

*

* @param inputFile 参数为文件类型的要压缩的文件或者文件夹

* @param out 输出流

* @return void

*/

private synchronized void creasteZip(File inputFile, OutputStream resOut)

{

ZipOutputStream out = null;

try

{

out = new ZipOutputStream(resOut);

out.setEncoding("gbk");

zip(inputFile, out, "");

}

catch (IOException e)

{

}

finally

{

try

{

out.close();

}

catch (IOException ex)

{

Logger.getLogger(MediaFileServlet.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

/**

* 压缩文件或者文件目录到指定的zip或者rar包

*

* @param inputFile 参数为文件类型的要压缩的文件或者文件夹

* @param out 输出流

* @param base 基文件夹

* @return void

*/

private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException

{

if (inputFile.isDirectory())

{

File[] inputFiles = inputFile.listFiles();

out.putNextEntry(new ZipEntry(base + "/"));

base = base.length() == 0 ? "" : base + "/";

for (int i = 0; i < inputFiles.length; i++)

{

zip(inputFiles[i], out, base + inputFiles[i].getName());

}

}

else

{

if (base.length() > 0)

{

out.putNextEntry(new ZipEntry(base));

}

else

{

out.putNextEntry(new ZipEntry(inputFile.getName()));

}

FileInputStream in = new FileInputStream(inputFile);

try

{

int c;

byte[] by = new byte[1024];

while ((c = in.read(by)) != -1)

{

out.write(by, 0, c);

}

}

catch (IOException e)

{

}

finally

{

in.close();

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值