编程语言
首页 > 编程语言> > 使用poi操作excel,使用java.util.zip压缩excel

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

作者:互联网

会出现的问题:

 

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