easypoi导出多个Excel压缩zip下载
<!-- 导入和导出-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
@Data
public class ExcelDataDTO {
@Excel(name = "姓名")
private String name;
@Excel(name = "年龄")
private Integer age;
@Excel(name = "身高")
private Integer height;
@Excel(name = "体重")
private Double weight;
public ExcelDataDTO(String name, Integer age, Integer height, Double weight) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
}
}
import java.io.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import static org.springframework.util.StreamUtils.BUFFER_SIZE;
public class ZipUtils {
public static void downloadZipForFiles(OutputStream outputStream, List<File> fileList){
ZipOutputStream zipOutputStream = null;
try {
zipOutputStream = new ZipOutputStream(outputStream);
for (File file : fileList) {
ZipEntry zipEntry = new ZipEntry(file.getName());
zipOutputStream.putNextEntry(zipEntry);
byte[] buf = new byte[BUFFER_SIZE];
int len;
FileInputStream in = new FileInputStream(file);
while ((len = in.read(buf)) != -1) {
zipOutputStream.write(buf, 0, len);
zipOutputStream.flush();
}
}
zipOutputStream.flush();
zipOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (zipOutputStream != null ) {
zipOutputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void downloadZipForByteMore(OutputStream outputStream,Map<String,byte[]> fileBufMap) {
ZipOutputStream zipOutputStream = null;
try {
zipOutputStream = new ZipOutputStream(outputStream);
for (String fileName:fileBufMap.keySet()){
ZipEntry zipEntry = new ZipEntry(fileName);
zipOutputStream.putNextEntry(zipEntry);
if (Objects.nonNull(fileBufMap.get(fileName))){
byte[] fileBytes = fileBufMap.get(fileName);
zipOutputStream.write(fileBytes);
zipOutputStream.flush();
}
}
zipOutputStream.flush();
zipOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (zipOutputStream != null ) {
zipOutputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static byte[] getZipForByteMore(Map<String,byte[]> fileBufMap) {
ByteArrayOutputStream totalZipBytes = null;
ZipOutputStream zipOutputStream = null;
try {
totalZipBytes = new ByteArrayOutputStream();
zipOutputStream = new ZipOutputStream(totalZipBytes);
for (String fileName:fileBufMap.keySet()){
ZipEntry zipEntry = new ZipEntry(fileName);
zipOutputStream.putNextEntry(zipEntry);
if (Objects.nonNull(fileBufMap.get(fileName))){
byte[] fileBytes = fileBufMap.get(fileName);
zipOutputStream.write(fileBytes);
zipOutputStream.flush();
}
}
zipOutputStream.close();
byte[] bytes = totalZipBytes.toByteArray();
totalZipBytes.close();
return bytes;
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (totalZipBytes != null) {
totalZipBytes.close();
}
if (zipOutputStream != null) {
zipOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
@RestController
public class ExcelController {
@SneakyThrows
@GetMapping("downloads2")
public void downloads2(HttpServletResponse response){
List<ExcelDataDTO> list = Lists.newArrayList();
for (int i = 0; i < 3; i++) {
list.add(new ExcelDataDTO("小明" + i,25 + i,170 + i,60.00 + i));
}
ExcelUtils.exportExcel(list,"标题","sheetName",ExcelDataDTO.class,"excelName.xls",response);
}
@SneakyThrows
@GetMapping("downloads3")
public void downloads3(HttpServletResponse response){
List<ExcelDataDTO> list1 = Lists.newArrayList();
List<ExcelDataDTO> list2 = Lists.newArrayList();
for (int i = 0; i < 3; i++) {
list1.add(new ExcelDataDTO("小明" + i,25 + i,170 + i,60.00 + i));
list2.add(new ExcelDataDTO("小明" + i,25 + i,170 + i,60.00 + i));
}
HashMap<String, byte[]> excelMaps = Maps.newHashMap();
byte[] exportExcelBytes1 = ExcelUtils.getExportExcelBytes(list1, "标题1", "sheetName1", ExcelDataDTO.class, "excelName.xls", response);
byte[] exportExcelBytes2 = ExcelUtils.getExportExcelBytes(list2, "标题2", "sheetName2", ExcelDataDTO.class, "excelName.xls", response);
excelMaps.put("exceName1.xls",exportExcelBytes1);
excelMaps.put("exceName2.xls",exportExcelBytes2);
ZipUtils.downloadZipForByteMore(response.getOutputStream(),excelMaps);
}
}
- 效果图