EasyExcel的替代项目FastExcel使用Demo详情
EasyExcel 项目作者停止维护了,推出新 FastExcel 仍是免费的开源框架,它具备以下特点:
- 完全兼容原 EasyExcel 的所有功能和特性,这使得用户可以无缝过渡。
- 从 EasyExcel 迁移到 FastExcel 只需简单地更换包名和 Maven 依赖即可完成升级。
- 在功能上,比 EasyExcel 提供更多创新和改进。
- FastExcel 新增了读取 Excel 指定行数和将 Excel 转换为 PDF 的功能。
FastExcel 具体使用如下
1.FastExcel 使用
1.1 添加依赖
<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>1.0.0</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
Excel示例:

2.FastExcel 写入Demo
import cn.idev.excel.FastExcel;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* FastExcel 写入测试
*
* @author rick
* @since 2024/12/20
*/
@Slf4j
@AllArgsConstructor
public class WriteExcelDemo {
// Excel写入功能
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("test", "UTF-8");
response.setHeader("Content-disposition",
"attachment;filename*=utf-8''" + fileName + ".xlsx");
// 写入数据
FastExcel.write(response.getOutputStream(), CompanyDeptMember.class)
.sheet("测试数据")
.doWrite(buildData());
}
// 创建测试数据
private List<CompanyDeptMember> buildData() {
// 创建 CompanyDeptMember 测试数据
List<CompanyDeptMember> dataList = new ArrayList<>();
dataList.add(new CompanyDeptMember() {{
setCompanyCode("C0001");
setDepartmentCode("D0001");
setMemberName("张三");
}});
dataList.add(new CompanyDeptMember() {{
setCompanyCode("C0001");
setDepartmentCode("D0001");
setMemberName("李四");
}});
return dataList;
}
@Data
public static class CompanyDeptMember {
@ExcelProperty("公司编码")
private String companyCode;
@ExcelProperty("部门编码")
private String departmentCode;
@ExcelProperty("成员")
private String memberName;
}
}
3.FastExcel 读取Demo
import cn.idev.excel.FastExcel;
import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.context.AnalysisContext;
import cn.idev.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* FastExcel 读取测试
*
* @author rick
* @since 2024/12/20
*/
@Slf4j
@AllArgsConstructor
public class ReadExcelDemo {
public static void main(String[] args) {
String fileName = "D:/测试数据.xlsx";
// 初始化Excel读取事件监听器
BaseExcelListener<CompanyDeptMember> baseExcelListener = new BaseExcelListener<>();
// 读取 Excel 文件
FastExcel.read(fileName, CompanyDeptMember.class, baseExcelListener).sheet(0).doRead();
// 得到读取数据
List<CompanyDeptMember> dataList = baseExcelListener.getDataList();
Map<String, Map<String, List<String>>> collect = dataList.stream().collect(Collectors.groupingBy(CompanyDeptMember::getCompanyCode, Collectors.groupingBy(CompanyDeptMember::getDepartmentCode, Collectors.collectingAndThen(Collectors.toList(), list -> list.stream().map(CompanyDeptMember::getMemberName).collect(Collectors.toList())))));
// 处理格式
List<Map<String, Object>> dealList = new ArrayList<>();
collect.forEach((k, v) -> {
v.forEach((k1, v1) -> {
dealList.add(new HashMap<String, Object>() {{
put("companyCode", k);
put("departmentCode", k1);
put("mas", v);
}});
});
});
log.info("dealList:{}", JSON.toJSONString(dealList));
}
public static class BaseExcelListener<T> extends AnalysisEventListener<T> {
// 用于存储读取到的Excel数据对象列表
private List<T> dataList = new ArrayList<>();
@Override
public void invoke(T t, AnalysisContext analysisContext) {
// 每读取一行数据,就将其添加到dataList中
dataList.add(t);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 当所有数据读取完成后,可以在这里进行一些后续操作,如打印读取到的数据数量
System.out.println("读取完成,共读取了 " + dataList.size() + " 条数据");
}
// 提供一个方法用于获取存储数据的列表
public List<T> getDataList() {
return dataList;
}
}
@Data
public static class CompanyDeptMember {
@ExcelProperty("公司编码")
private String companyCode;
@ExcelProperty("部门编码")
private String departmentCode;
@ExcelProperty("成员")
private String memberName;
}
}
4.EasyExcel 如何升级到FastExcel
4.1 修改依赖
将 EasyExcel 的依赖替换为 FastExcel 的依赖,如下:
<!-- easyexcel 依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>xxxx</version>
</dependency>
依赖替换为:
<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId> <!-- 使用最新版本 -->
<version>1.0.0</version>
</dependency>
4.2 修改代码
将 EasyExcel 的包名替换为 FastExcel 的包名,如下:
// 将 easyexcel 的包名替换为 FastExcel 的包名
import com.alibaba.excel.**;
替换为
import cn.idev.excel.**;
5.Excel转换为PDF
FastExcel 支持将 Excel 文件转换为 PDF 文件,FastExcel 将 Excel 转为Pdf 底层依赖于 Apache POI 和 itext-pdf。受限于 itext-pdf 的许可证,请确保您的使用符合 itext-pdf 的许可证,后续 FastExcel 将支持更多的 PDF 转换功能替换 itext-pdf,实现代码如下:
FastExcel.convertToPdf(new File("excelFile"),new File("pdfFile"),null,null);

浙公网安备 33010602011771号