几行代码就能实现复杂的 Excel 导入导出,这个工具类真心强大!

简介: 几行代码就能实现复杂的 Excel 导入导出,这个工具类真心强大!

功能介绍


IMPORT


ExcelHandle 核心处理器

ExcelWorkbookManage excel所有工作表管理

ExcelInitConfig 配置文件初始化

AbstractFileParser 文件转换类

alanpoi import有何优势?

用户不需要额外引入poi等繁琐的jar


毫秒级解析大文件,支持一键解析多sheet页签,不需要自己按照一定的格式循环匹配解析所有数据


不管你的系统多么复杂,有多少个导入,alanpoi全部支持,而且准确返回你需要的对象,减轻开发者工作量


目前外界业务越来越复杂,对各个功能要求也越来越严格,当然导入也不例外,alanpoi支持错误一键回写到excel,对应到每一行


alanpoi灵活可扩展,提供了ExcelConsumeInterface接口,可继承它,实现valid、error、end三个方法编写自己的业务


valid: 方法参数返回excel所有数据,用户可进行自我校验

error: 导入错误会回调

end: 方法参数返回校验成功的数据,valid校验失败的数据不会返回,用户可以自己操作持久化或者其他业务


怎么使用alanpoi实现导入


项目中使用:


<dependency>
    <groupId>com.alanpoi</groupId>
    <artifactId>alanpoi-analysis</artifactId>
    <version>1.3.0</version>
</dependency>


简单一句话:一配置一继承一调用


一配置


在项目resources目录中新建excel-config.xml文件,cosume中配置自己的消费类路径,继承ExcelConsumeInterface接口,sheet中的vo是把当前sheet序列化的对象路径,column中当然就是配置vo中的属性了。


其中name可选字段,填了就是按照这个匹配excel列名,不填就是按照offset顺序;导入包含多个sheet就配置多个


<?xml version = "1.0" encoding = "GB2312"?>
<exg name="excelId" version="1.0" file-type="excel">
  <excel id="ACCOUNT" consume="com.xxx.FinAccountImportHandler">
     <sheet index="0" row-start="1" column-start="0"
            vo="com.xxx.vo.FinAccountImportVO">
         <column name="公司/供应商编号" offset="1">companyCode</column>
         <column name="公司/供应商名称" offset="2">companyName</column>
         <column name="银行账号" offset="3">bankAccount</column>
         <column name="开户银行" offset="4">bankName</column>
     </sheet>
 </excel>
</exg>


一继承

consume类继承ExcelConsumeInterface接口,实现方法


/**
 * when error will 调用
 *
 * @param excelError
 */
void error(ExcelError excelError);
/**
 * custom valid data
 *
 * @param workbookId
 * @param sheetDataList
 */
void validData(String workbookId, List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);
/**
 * @param sheetDataList return success data
 */
void end(List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);


一调用


用户调用ExcelExportUtil类的customImportData即可,参数excelId就是excel-conifg.xml中配置的id


Export


描叙


能够用一行代码实现绝不用第二行,如果一行不行,那就再加一行!


模式


注解模式导出:


ExcelSheet注解: 用于导入类上,可制定sheet名,列头的颜色、字体、高度、宽度

ExcelColum注解: 用于导入类的属性上,可指定列头的名称,单元格的样式

DateFormat注解: 用于导入类的属性上, 可以按照指定格式输出到excel,默认"yyyy/MM/dd"

NumFormat注解: 用于导入类的属性上,可以按照指定格式输出到excel,默认"00.00"


样例:


@ExcelSheet(name = "测试", backColor = AlanColors.GREEN, font = "宋体", fontSize = 25)
@Data
public class ExportVO {
    @ExcelColumn(name = "名称", width = 32, link = "${url}")
    private String name;
    @ExcelColumn(name = "值")
    private String value;
    @ExcelColumn(name = "金额")
    @NumFormat(value = "0000.00##")
    private BigDecimal amount;
    @ExcelColumn(name = "时间格式化")
    @DateFormat(value = "yyyy-MM-dd hh:mm:ss")
    private Date dateTime;
    @DateFormat
    @ExcelColumn(name = "日期格式化")
    private java.sql.Date date;
    @ExcelColumn(isExist = false)
    private String url;
}


使用


方式一. 直接导出到浏览器


ExcelExportUtil.export(Colletion<?>,Class,HttpServletRequest,HttpServletResponse,fileName);


方式二. 调用getWorkbook获取工作表,自行处理workbook


ExcelExportUtil.getWorkbook(Collection<?> singleSheetData, Class<?> c)


高级使用


示例一:导出指定列(动态导出列)


List<ExportVO> list = new ArrayList<>();
for (int i = 0; i < 500; i++) {
    ExportVO exportVO = new ExportVO();
    exportVO.setName("name" + i);
    exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
    exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
    exportVO.setDate(new Date(132324343 + i * 100));
    exportVO.setDateTime(new java.util.Date());
    list.add(exportVO);
}
List<String> colList = new ArrayList<>();
//按照顺序仅导出add的列
colList.add("name");
colList.add("value");
//调用获取workbook对象;也可以直接调用exportSpecifyCol方法导出到浏览器
Workbook workbook = ExcelExportUtil.getWorkbookSpecifyCol(list, ExportVO.class, colList);


示例二:多sheet页签导出


List<ExportVO> list = new ArrayList<>();
List<Export2VO> list2 = new ArrayList<>();
for (int i = 0; i < 500; i++) {
    ExportVO exportVO = new ExportVO();
    exportVO.setName("name" + i);
    exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
    exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
    exportVO.setDate(new Date(132324343 + i * 100));
    exportVO.setDateTime(new java.util.Date());
    list.add(exportVO);
    Export2VO export2VO = new Export2VO();
    export2VO.setName("name" + i);
    export2VO.setValue("value" + i);
    export2VO.setAmount(new BigDecimal(6666.666 + i * 10));
    export2VO.setDate(new Date(132324343 + i * 100));
    export2VO.setDateTime(new java.util.Date());
    list2.add(export2VO);
}
Map<Class<?>, Collection<?>> map = new HashMap<>();
map.put(ExportVO.class, list);
map.put(Export2VO.class, list2);
//调用获取workbook对象;也可以直接调用exportByMultiSheet方法导出到浏览器
Workbook workbook = ExcelExportUtil.getWorkbookByMultiSheet(map);


相关文章
|
6月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
88 0
Excel中用宏VBA实现GBT 4761-2008 家庭关系代码转换
Excel中用宏VBA实现GBT 4761-2008 家庭关系代码转换
|
2月前
|
Java Apache
Apache POI java对excel表格进行操作(读、写) 有代码!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
55 0
|
4月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
301 0
|
4月前
|
SQL
SQL SERVER 查询表结构,导出到Excel 生成代码用
SQL SERVER 查询表结构,导出到Excel 生成代码用
49 0
|
5月前
|
数据格式 Python
Python代码示例,读取excel表格,将行数据转为列数据。(10)
【7月更文挑战第10天】Python代码示例,读取excel表格,将行数据转为列数据。
206 2
|
4月前
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
100 0
|
6月前
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
329 1
|
6月前
|
前端开发 Java 开发工具
如何在Spring Boot框架下实现高效的Excel服务端导入导出?
ArtifactId:是项目的唯一标识符,在实际开发中一般对应项目的名称,就是项目根目录的名称。 Group Id,Artfact Id是保证项目唯一性的标识,一般来说如果项目打包上传至maven这样的包管理仓库中。在搜索你的项目时,Group Id,Artfact Id是必要的条件。 Version:版本号,默认0.0.1-SNAPSHOT。SNAPSHOT代表不稳定的版本,与之相对的有RELEASE。 Project type:工程的类型,maven工程还是gradle工程。 Language:语言(Java,Kotlin,Groovy)。
|
6月前
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析