SpingBoot解析Excel数据
前言
在最近的工作中,由于导入模板除了前三列(姓名、手机号、实发工资)固定;其余的列不固定,并且可以做到两个模板的数据都能够正常入库进行对应业务处理。
一、数据模板数据展示:
(1)模板一
(2)模板二
二、处理思路
观察两个模板的数据;结合面向对象的编程思想设计;我可以将两模板需要的获取的字段属性归纳为5个属性点:
注意:标题头在以下中不算!!!
索引(index)-- 相当于excel中所在列的下标列索引
列名称(name)-- 相当于excel中所在列的名称
列值(value)-- 相当于excel中所在列的值
是否存在合并单元格(isGrossField)-- 相当于excel中所在列的是否有合并单元格
合并的子元素(child)-- 相当于excel中所在列的是否有合并单元格下所包含的列
三、编程准备
1、实体类创建:
/** * @project * @Description * @Author songwp * @Date 2022/8/17 9:04 * @Version 1.0.0 **/ @Data public class TreeExcel implements Serializable { private int index = 0; private String name; private String value; private boolean isGrossField; private Listchilds; }
2、maven依赖的引入
<dependency> <groupId>com.alibabagroupId> <artifactId>easyexcelartifactId> <version>2.2.0-beta2version> dependency>
3、文件解析工具类的编写
import com.alibaba.excel.EasyExcelFactory; import com.alibaba.excel.metadata.Sheet; import com.alibaba.fastjson.JSONArray; import java.io.FileInputStream; import java.io.InputStream; import java.util.*; import java.util.concurrent.LinkedBlockingQueue; /** * @project * @Description * @Author songwp * @Date 2022/8/17 9:09 * @Version 1.0.0 **/ public class ExcelUtil { private String value = "empty"; private Listnodes; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public void createExcelJson(List treeExcelList, int valueQueueSize, Queue linkedValue, boolean firstStorey) { if (null != nodes && !firstStorey) { TreeExcel treeExcel = new TreeExcel(); treeExcel.setGrossField(true); treeExcel.setName(treeExcel.getName()); treeExcel.setIndex(valueQueueSize - linkedValue.size()); List listElem = new ArrayList<>(); treeExcel.setChilds(listElem); for (ExcelUtil tree : nodes) { tree.createExcelJson(listElem, valueQueueSize, linkedValue, false); } treeExcelList.add(treeExcel); } else { if (firstStorey) { for (ExcelUtil tree : nodes) { tree.createExcelJson(treeExcelList, valueQueueSize, linkedValue, false); } return; } TreeExcel treeExcel = new TreeExcel(); treeExcel.setIndex(valueQueueSize - linkedValue.size()); treeExcel.setName(treeExcel.getName()); treeExcel.setValue(linkedValue.poll()); treeExcel.setGrossField(false); treeExcelList.add(treeExcel); } } /** * 获取树状数据结构 * * @param inputStream * @return * @throws Exception */ public static JSONArray getExcelParseJSON(InputStream inputStream) throws Exception { List
4、测试类的编写
public static void main(String[] args) throws Exception { InputStream fis = new FileInputStream("C:\\Users\\Lenovo\\Desktop\\工作簿1.xlsx"); JSONArray jsonArray = getExcelParseJSON(fis); System.out.println(jsonArray); TreeExcel treeExcel = new TreeExcel(); for (Object salaryObject : jsonArray) { JSONArray salaryInfo = (JSONArray) salaryObject; treeExcel.setIndex(Integer.parseInt(((Map) salaryInfo.get(0)).get("index").toString())); treeExcel.setName(((Map) salaryInfo.get(0)).get("name").toString()); treeExcel.setValue(((Map) salaryInfo.get(0)).get("value").toString()); treeExcel.setGrossField(Boolean.getBoolean(((Map) salaryInfo.get(0)).get("isGrossField").toString())); } System.out.println(treeExcel); }
5、日志输出展示
注意:因为自己的实体在循环外面展示;所以循环里面赋值存在覆盖;所以获取到的是最后一条数据对应信息
(1)模板一:
(2)模板二:
6、返回的json展示:
(1)模板一:
[ [ { "name":"姓名", "index":0, "isGrossField":false, "value":"张三" }, { "name":"手机号", "index":1, "isGrossField":false, "value":"18710000000" }, { "name":"实发工资", "index":2, "isGrossField":false, "value":"200000" }, { "name":"1高级专家补贴", "index":3, "isGrossField":false, "value":"2000" }, { "name":"话费补贴1", "index":4, "isGrossField":false, "value":"300" }, { "name":"薪级薪档", "index":5, "isGrossField":false, "value":"五档" }, { "name":"考核系数", "index":6, "isGrossField":false, "value":"25%" }, { "name":"参与绩效奖金计算的岗位工资", "index":7, "isGrossField":false, "value":"1231" }, { "name":"工资说明", "index":8, "isGrossField":false, "value":"" }, { "name":"温馨提示", "index":9, "isGrossField":false, "value":"无" } ], [ { "name":"姓名", "index":0, "isGrossField":false, "value":"李四" }, { "name":"手机号", "index":1, "isGrossField":false, "value":"18710000001" }, { "name":"实发工资", "index":2, "isGrossField":false, "value":"200001" }, { "name":"1高级专家补贴", "index":3, "isGrossField":false, "value":"2001" }, { "name":"话费补贴1", "index":4, "isGrossField":false, "value":"301" }, { "name":"薪级薪档", "index":5, "isGrossField":false, "value":"五档" }, { "name":"考核系数", "index":6, "isGrossField":false, "value":"125%" }, { "name":"参与绩效奖金计算的岗位工资", "index":7, "isGrossField":false, "value":"1232" }, { "name":"工资说明", "index":8, "isGrossField":false, "value":"无" }, { "name":"温馨提示", "index":9, "isGrossField":false, "value":"无" } ], [ { "name":"姓名", "index":0, "isGrossField":false, "value":"王五" }, { "name":"手机号", "index":1, "isGrossField":false, "value":"18710000002" }, { "name":"实发工资", "index":2, "isGrossField":false, "value":"200002" }, { "name":"1高级专家补贴", "index":3, "isGrossField":false, "value":"2002" }, { "name":"话费补贴1", "index":4, "isGrossField":false, "value":"302" }, { "name":"薪级薪档", "index":5, "isGrossField":false, "value":"五档" }, { "name":"考核系数", "index":6, "isGrossField":false, "value":"" }, { "name":"参与绩效奖金计算的岗位工资", "index":7, "isGrossField":false, "value":"1233" }, { "name":"工资说明", "index":8, "isGrossField":false, "value":"无" }, { "name":"温馨提示", "index":9, "isGrossField":false, "value":"无" } ], [ { "name":"姓名", "index":0, "isGrossField":false, "value":"赵老六" }, { "name":"手机号", "index":1, "isGrossField":false, "value":"18710000003" }, { "name":"实发工资", "index":2, "isGrossField":false, "value":"200003" }, { "name":"1高级专家补贴", "index":3, "isGrossField":false, "value":"2003" }, { "name":"话费补贴1", "index":4, "isGrossField":false, "value":"303" }, { "name":"薪级薪档", "index":5, "isGrossField":false, "value":"五档" }, { "name":"考核系数", "index":6, "isGrossField":false, "value":"325%" }, { "name":"参与绩效奖金计算的岗位工资", "index":7, "isGrossField":false, "value":"1234" }, { "name":"工资说明", "index":8, "isGrossField":false, "value":"无" }, { "name":"温馨提示", "index":9, "isGrossField":false, "value":"无" } ], [ { "name":"姓名", "index":0, "isGrossField":false, "value":"小明" }, { "name":"手机号", "index":1, "isGrossField":false, "value":"18710000004" }, { "name":"实发工资", "index":2, "isGrossField":false, "value":"200004" }, { "name":"1高级专家补贴", "index":3, "isGrossField":false, "value":"2004" }, { "name":"话费补贴1", "index":4, "isGrossField":false, "value":"304" }, { "name":"薪级薪档", "index":5, "isGrossField":false, "value":"五档" }, { "name":"考核系数", "index":6, "isGrossField":false, "value":"425%" }, { "name":"参与绩效奖金计算的岗位工资", "index":7, "isGrossField":false, "value":"1235" }, { "name":"工资说明", "index":8, "isGrossField":false, "value":"无" }, { "name":"温馨提示", "index":9, "isGrossField":false, "value":"无" } ] ]
(2)模板二:
[ [ { "name":"姓名", "index":0, "isGrossField":false, "value":"张三" }, { "name":"手机号", "index":1, "isGrossField":false, "value":"18700000000" }, { "name":"实发工资", "index":2, "isGrossField":false, "value":"25000" }, { "name":"应发工资", "isGrossField":true, "child":[ { "name":"出勤\n天数", "index":3, "isGrossField":false, "value":"22" }, { "name":"岗位工资系数", "index":4, "isGrossField":false, "value":"3500" }, { "name":"岗位工\n资标准", "index":5, "isGrossField":false, "value":"13000" }, { "name":"岗位工资", "index":6, "isGrossField":false, "value":"3500" }, { "name":"绩效系数", "index":7, "isGrossField":false, "value":"150" }, { "name":"绩效奖金标准", "index":8, "isGrossField":false, "value":"100" }, { "name":"个人绩效分数", "index":9, "isGrossField":false, "value":"100" }, { "name":"绩效奖金", "index":10, "isGrossField":false, "value":"1000" }, { "name":"工龄补贴", "index":11, "isGrossField":false, "value":"1000" }, { "name":"职称津贴", "index":12, "isGrossField":false, "value":"" }, { "name":"话费补贴", "index":13, "isGrossField":false, "value":"100" }, { "name":"证书津贴", "index":14, "isGrossField":false, "value":"1000" }, { "name":"保密津贴", "index":15, "isGrossField":false, "value":"100" }, { "name":"午餐补贴", "index":16, "isGrossField":false, "value":"" }, { "name":"医疗补贴", "index":17, "isGrossField":false, "value":"1000" }, { "name":"交通补贴", "index":18, "isGrossField":false, "value":"1000" }, { "name":"降温费", "index":19, "isGrossField":false, "value":"100" }, { "name":"差额", "index":20, "isGrossField":false, "value":"100" }, { "name":"小计", "index":21, "isGrossField":false, "value":"1000" } ] }, { "name":"应扣款项", "isGrossField":true, "child":[ { "name":"旷工\n天数", "index":22, "isGrossField":false, "value":"1" }, { "name":"旷工扣款", "index":23, "isGrossField":false, "value":"100" }, { "name":"事假\n天数", "index":24, "isGrossField":false, "value":"1" }, { "name":"事假扣款", "index":25, "isGrossField":false, "value":"100" }, { "name":"病假\n天数", "index":26, "isGrossField":false, "value":"1" }, { "name":"病假扣款", "index":27, "isGrossField":false, "value":"100" }, { "name":"小计", "index":28, "isGrossField":false, "value":"300" } ] }, { "name":"应发合计", "index":29, "isGrossField":false, "value":"40000" }, { "name":"07月社保、06月医疗及07月公积金扣款", "isGrossField":true, "child":[ { "name":"月养老保险", "index":30, "isGrossField":false, "value":"500" }, { "name":"月医疗保险", "index":31, "isGrossField":false, "value":"600" }, { "name":"月大额补充", "index":32, "isGrossField":false, "value":"700" }, { "name":"月失业保险", "index":33, "isGrossField":false, "value":"800" }, { "name":"社保补缴养老", "index":34, "isGrossField":false, "value":"900" }, { "name":"社保补缴大额", "index":35, "isGrossField":false, "value":"100" }, { "name":"社保补缴\n医疗", "index":36, "isGrossField":false, "value":"110" }, { "name":"公积金", "index":37, "isGrossField":false, "value":"120" } ] }, { "name":"社保公积当月合计", "index":38, "isGrossField":false, "value":"130" }, { "name":"六项附加当月", "index":39, "isGrossField":false, "value":"140" }, { "name":"个税", "index":40, "isGrossField":false, "value":"150" }, { "name":"补偿", "index":41, "isGrossField":false, "value":"1600" } ], [ { "name":"姓名", "index":0, "isGrossField":false, "value":"李四" }, { "name":"手机号", "index":1, "isGrossField":false, "value":"18710000000" }, { "name":"实发工资", "index":2, "isGrossField":false, "value":"20000" }, { "name":"应发工资", "isGrossField":true, "child":[ { "name":"出勤\n天数", "index":3, "isGrossField":false, "value":"21" }, { "name":"岗位工资系数", "index":4, "isGrossField":false, "value":"3500" }, { "name":"岗位工\n资标准", "index":5, "isGrossField":false, "value":"13000" }, { "name":"岗位工资", "index":6, "isGrossField":false, "value":"3500" }, { "name":"绩效系数", "index":7, "isGrossField":false, "value":"200" }, { "name":"绩效奖金标准", "index":8, "isGrossField":false, "value":"200" }, { "name":"个人绩效分数", "index":9, "isGrossField":false, "value":"200" }, { "name":"绩效奖金", "index":10, "isGrossField":false, "value":"2000" }, { "name":"工龄补贴", "index":11, "isGrossField":false, "value":"" }, { "name":"职称津贴", "index":12, "isGrossField":false, "value":"2000" }, { "name":"话费补贴", "index":13, "isGrossField":false, "value":"200" }, { "name":"证书津贴", "index":14, "isGrossField":false, "value":"2000" }, { "name":"保密津贴", "index":15, "isGrossField":false, "value":"200" }, { "name":"午餐补贴", "index":16, "isGrossField":false, "value":"2000" }, { "name":"医疗补贴", "index":17, "isGrossField":false, "value":"2000" }, { "name":"交通补贴", "index":18, "isGrossField":false, "value":"2000" }, { "name":"降温费", "index":19, "isGrossField":false, "value":"200" }, { "name":"差额", "index":20, "isGrossField":false, "value":"200" }, { "name":"小计", "index":21, "isGrossField":false, "value":"2000" } ] }, { "name":"应扣款项", "isGrossField":true, "child":[ { "name":"旷工\n天数", "index":22, "isGrossField":false, "value":"2" }, { "name":"旷工扣款", "index":23, "isGrossField":false, "value":"200" }, { "name":"事假\n天数", "index":24, "isGrossField":false, "value":"2" }, { "name":"事假扣款", "index":25, "isGrossField":false, "value":"200" }, { "name":"病假\n天数", "index":26, "isGrossField":false, "value":"2" }, { "name":"病假扣款", "index":27, "isGrossField":false, "value":"200" }, { "name":"小计", "index":28, "isGrossField":false, "value":"400" } ] }, { "name":"应发合计", "index":29, "isGrossField":false, "value":"50000" }, { "name":"07月社保、06月医疗及07月公积金扣款", "isGrossField":true, "child":[ { "name":"月养老保险", "index":30, "isGrossField":false, "value":"600" }, { "name":"月医疗保险", "index":31, "isGrossField":false, "value":"700" }, { "name":"月大额补充", "index":32, "isGrossField":false, "value":"800" }, { "name":"月失业保险", "index":33, "isGrossField":false, "value":"900" }, { "name":"社保补缴养老", "index":34, "isGrossField":false, "value":"1000" }, { "name":"社保补缴大额", "index":35, "isGrossField":false, "value":"110" }, { "name":"社保补缴\n医疗", "index":36, "isGrossField":false, "value":"120" }, { "name":"公积金", "index":37, "isGrossField":false, "value":"130" } ] }, { "name":"社保公积当月合计", "index":38, "isGrossField":false, "value":"140" }, { "name":"六项附加当月", "index":39, "isGrossField":false, "value":"150" }, { "name":"个税", "index":40, "isGrossField":false, "value":"160" }, { "name":"补偿", "index":41, "isGrossField":false, "value":"1700" } ] ]