使用 Java 的 EasyExcel 库循环生成多个 Excel 文件,并将其压缩成一个 Zip 文件,可以利用 ZipOutputStream 类。以下示例代码展示了整个过程:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;

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

public class EasyExcelToZipExample {
    public static void main(String[] args) {
        // 创建一个临时文件夹用于存放生成的 Excel 文件
        File tempFolder = new File('temp');
        tempFolder.mkdirs();

        // 循环生成 Excel 文件
        for (int i = 1; i <= 5; i++) {
            String fileName = 'file' + i + '.xlsx';
            String filePath = tempFolder.getPath() + File.separator + fileName;
            generateExcel(filePath);
        }

        // 将生成的 Excel 文件压缩成 zip 文件
        String zipFilePath = 'output.zip';
        zipFiles(tempFolder, zipFilePath);

        // 删除临时文件夹
        deleteFolder(tempFolder);
    }

    private static void generateExcel(String filePath) {
        ExcelWriterBuilder writerBuilder = EasyExcel.write(filePath);
        WriteSheet writeSheet = EasyExcel.writerSheet('Sheet1').build();
        writerBuilder.sheet().doWrite(dataList());
        writerBuilder.build().finish();
    }

    private static void zipFiles(File sourceFolder, String zipFilePath) {
        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
            for (File file : sourceFolder.listFiles()) {
                FileInputStream fileInputStream = new FileInputStream(file);
                ZipEntry zipEntry = new ZipEntry(file.getName());
                zipOutputStream.putNextEntry(zipEntry);

                byte[] buffer = new byte[1024];
                int length;
                while ((length = fileInputStream.read(buffer)) > 0) {
                    zipOutputStream.write(buffer, 0, length);
                }

                fileInputStream.close();
                zipOutputStream.closeEntry();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void deleteFolder(File folder) {
        if (folder.isDirectory()) {
            for (File file : folder.listFiles()) {
                deleteFolder(file);
            }
        }
        folder.delete();
    }

    private static List<List<String>> dataList() {
        List<List<String>> dataList = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            List<String> row = Arrays.asList('data' + i + '-1', 'data' + i + '-2', 'data' + i + '-3');
            dataList.add(row);
        }
        return dataList;
    }
}

上述代码中,首先会创建一个名为 'temp' 的临时文件夹,然后循环生成 5 个 Excel 文件,并将它们放在该临时文件夹中。接着,调用 zipFiles 方法将临时文件夹中的文件压缩成一个名为 'output.zip' 的 Zip 文件。最后,调用 deleteFolder 方法删除临时文件夹。

请注意,代码中的 generateExcel 方法用于生成 Excel 文件,您需要根据实际需求进行修改。同时,您需要导入相关的依赖包,例如 EasyExcel 库。


原文地址: https://www.cveoy.top/t/topic/qEJp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录