ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用poi操作excel,使用java.util.zip压缩excel

2020-11-24 17:32:58  阅读:201  来源: 互联网

标签:sheet zip import excel zos new java


会出现的问题:

 

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;


import java.io.File;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


/**
 * @Auther: wdq
 * @Date: 2020/11/22 16:33
 * @Description:
 */
@SpringBootTest
public class OnebookTests {

    /**
     * 测试读取excel并操作excel
     * 测试excel -> zip
     * @throws IOException
     */
    @Test
    public void testZip() throws IOException {
        // copy文件到zip输出流中
        byte[] buf = new byte[1024];
        int cnt = 1,len;
        FileOutputStream out = new FileOutputStream("D:\\test_zip.zip");
        ZipOutputStream zos = new ZipOutputStream(out);
        // 1、读取模板--模板图在下面,可以自己画一个
        FileInputStream fileIn = new FileInputStream("D:\\test.xls");
        // 获取excel对象
        HSSFWorkbook wb = new HSSFWorkbook(fileIn);
        // 读取第一个sheet页
        HSSFSheet sheet = wb.getSheetAt(0);
        // 模拟循环10次,压缩10个excel到压缩包里面
        for (int i = 0; i < 10; i++) {
            // 2、填写数据
            // 获取第1行,第1列的单元格,然后填写数据
            // 一个excel有多个sheet
            // 一个sheet有多个row
            // 一个row有多个cell
            //  HSSFRow row = sheet.getRow(0);
            //  HSSFCell cell = row.getCell(0);
            //  cell.setCellValue("【2020】年【"+(cnt)+"】月");
            // 下面这一行与上面三行等价
            sheet.getRow(0).getCell(0).setCellValue( "【2020】年【"+(cnt)+"】月" );
            // 3、保存到输出流
            ByteArrayOutputStream fileOut = new ByteArrayOutputStream();
            wb.write(fileOut);
            // 4、输出流转换成输入流
            byte[] content = fileOut.toByteArray();
            ByteArrayInputStream is = new ByteArrayInputStream(content);
            BufferedInputStream in = new BufferedInputStream(is);
            // 5、放到压缩流--填写待文件的名称
            zos.putNextEntry(new ZipEntry("test-wdq"+(cnt++)+".xls"));
            while ((len = in.read(buf)) != -1) {
                zos.write(buf, 0, len);
            }
            // 关闭流的顺序不能变,遵从"先开后关"的原则
            // 关闭流的顺序不对,会导致压缩包的文件损坏
            zos.flush();
            fileOut.close();
            zos.closeEntry();
        }
        // 关闭流的顺序不能变,遵从"先开后关"的原则
        wb.close();
        zos.close();
        out.close();
    }
}

 

标签:sheet,zip,import,excel,zos,new,java
来源: https://blog.csdn.net/qq_42391248/article/details/110087678

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有