本博文使用工具https://github.com/nvenky/excel-parser,其思想类似orm,数据源来于Excel文件,Excel文件
中的每一行对应java中的类实例,此工具使用注解绑定Excel每一行的中某列对应类的哪个属性(Hibernate也是这样做的,不过根据名字yin’s, myabtis使用的是配置的方式)。

拿某公司的差表规则Excel文件举例:

我们可以实现其对应的java类:

package com.beaver.drools.exampl.travel.rule;import org.javafunk.excelparser.annotations.ExcelField;
import org.javafunk.excelparser.annotations.ExcelObject;
import org.javafunk.excelparser.annotations.ParseType;/*** Created by beaver on 2017/5/20.*/
@ExcelObject(parseType = ParseType.ROW, start = 2, end = 61)
public class TravelRule {//公司名称@ExcelField(position = 1)private String companyName;//费用类型@ExcelField(position = 2)private String expenseType;//规则应用场景@ExcelField(position = 3)private String applyPoint;//规则结果@ExcelField(position = 4)private String ruleAction;//规则内容@ExcelField(position = 7)private String rule;//提示信息@ExcelField(position = 9)private String alertMessage;//规则ID@ExcelField(position = 11)private String ruleId;//解析出的drools规则内容private String droolsRule;public String getCompanyName() {return companyName;}public void setCompanyName(String companyName) {this.companyName = companyName;}public String getExpenseType() {return expenseType;}public void setExpenseType(String expenseType) {this.expenseType = expenseType;}public String getRule() {return rule;}public void setRule(String rule) {this.rule = rule;}public String getApplyPoint() {return applyPoint;}public void setApplyPoint(String applyPoint) {this.applyPoint = applyPoint;}public String getRuleAction() {return ruleAction;}public void setRuleAction(String ruleAction) {this.ruleAction = ruleAction;}public String getAlertMessage() {return alertMessage;}public void setAlertMessage(String alertMessage) {this.alertMessage = alertMessage;}public String getRuleId() {return ruleId;}public void setRuleId(String ruleId) {this.ruleId = ruleId;}public String getDroolsRule() {return droolsRule;}public void setDroolsRule(String droolsRule) {this.droolsRule = droolsRule;}@Overridepublic String toString() {return "TravelRule{" +"companyName='" + companyName + '\'' +", expenseType='" + expenseType + '\'' +", applyPoint='" + applyPoint + '\'' +", ruleAction='" + ruleAction + '\'' +", rule='" + rule + '\'' +", alertMessage='" + alertMessage + '\'' +", ruleId='" + ruleId + '\'' +", droolsRule='" + droolsRule + '\'' +'}';}
}

利用此工具转换:

在package com.beaver.drools.exampl.travel.rule;import com.beaver.drools.util.KieSessionUtil;
import com.google.gson.Gson;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.javafunk.excelparser.SheetParser;
import org.kie.api.io.ResourceType;import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;/*** Created by beaver on 2017/5/20.*/
public class TravleRuelTest {static String packageName = "package com.beaver.drools.exampl.travel.rule";static List<String> importPackages = Arrays.asList("import java.math.*", "import com.beaver.drools.common.model.*");static String sheetName = "工作表1";static String fileName = "腾讯差标规则1.xlsx";static String objectType = "MatchInvoiceTravelRuleRequestDto";static String objectVar = "$invoice";static String resultPropertyName = "result";static String alertMessagePropertyName = "remarkMessage";//规则内容属性别名,如{EXP_LEVEL}IN[一般员工],EXP_LEVEL 可以起别名static Map<String, String> rulePropertyNameAlias = new HashMap<>();static {rulePropertyNameAlias.put("\\{.*LEVEL.*\\}", "EXPENSE_LEVEL");rulePropertyNameAlias.put("\\{.*LOCATION.*\\}", "city");rulePropertyNameAlias.put("\\{.*FEE.*\\}", "INVOICE_AMOUNT");rulePropertyNameAlias.put("\\{.*DAYS.*\\}", "days");}public static void main(String[] args) throws IOException {//Get the sheet using POI API.SheetParser parser = new SheetParser();InputStream inputStream = TravleRuelTest.class.getClassLoader().getResourceAsStream(fileName);Sheet sheet = new XSSFWorkbook(inputStream).getSheet(sheetName);//Invoke the Sheet parser.List<TravelRule> entityList = parser.createEntity(sheet, TravelRule.class, t -> t.printStackTrace());//entityList = entityList.stream().filter(t -> t.getCompanyName() != null && !t.getCompanyName().isEmpty()).collect(Collectors.toList());System.out.println(new Gson().toJson(entityList));}}

输出内容:

[{"companyName": "微民","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[1] AND {ER_EXP_FEE}>{ER_DAYS} *600","alertMessage": "您的房费高于公司标准","ruleId": "8a24ef78-d1c4-4c7c-924f-f199fa3c5eb1"},{"companyName": "微民","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[2] AND {ER_EXP_FEE}>{ER_DAYS}*700","alertMessage": "您的房费高于公司标准","ruleId": "f9b17610-7917-4f71-b369-602224fdd20d"},{"companyName": "微民","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[3] AND {ER_EXP_FEE}>{ER_DAYS}*800","alertMessage": "您的房费高于公司标准","ruleId": "128e621a-832a-4876-81c8-a5a9624b6ca7"},{"companyName": "微民","expenseType": "差旅补贴","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{ER_LOCATION_COUNTRY}IN[中国] AND {ER_EXP_FEE}>{ER_DAYS}*140","alertMessage": "您的补贴高于公司标准","ruleId": "06d1afc9-4a0e-4ad6-b0b1-01af068997fe"},{"companyName": "微民","expenseType": "差旅补贴","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{ER_LOCATION_COUNTRY}NOT IN[中国] AND {ER_EXP_FEE}>{ER_DAYS}*400","alertMessage": "您的补贴高于公司标准","ruleId": "922d99ff-c5bc-4f26-a365-d8b6e8a9a999"},{"companyName": "腾南","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[一般员工] AND {ER_EXP_FEE}>{ER_DAYS}*400","alertMessage": "您的房费高于公司标准","ruleId": "7c170ce0-080e-499a-9046-0dc7d226b86c"},{"companyName": "腾南","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[一般员工] AND {ER_LOCATION}NOT IN[北京/上海/深圳] AND {ER_EXP_FEE}>{ER_DAYS}*300","alertMessage": "您的房费高于公司标准","ruleId": "6135e677-867b-41ed-8d00-7512b5ec5c2a"},{"companyName": "腾南","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[总监] AND {ER_EXP_FEE}>{ER_DAYS}*550","alertMessage": "您的房费高于公司标准","ruleId": "636ebfda-6d78-4ec7-a441-234ff931fa57"},{"companyName": "腾南","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[总监] AND {ER_LOCATION}NOT IN[北京/上海/深圳] AND {ER_EXP_FEE}>{ER_DAYS}*400","alertMessage": "您的房费高于公司标准","ruleId": "b236a113-e547-4f65-9ddc-3b9549efa6ce"},{"companyName": "腾南","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[总裁] AND {ER_EXP_FEE}>{ER_DAYS}*700","alertMessage": "您的房费高于公司标准","ruleId": "8bb7e480-bf94-4c24-a46e-963ae60bee7e"},{"companyName": "腾南","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[总裁] AND {ER_LOCATION}NOT IN[北京/上海/深圳] AND {ER_EXP_FEE}>{ER_DAYS}*500","alertMessage": "您的房费高于公司标准","ruleId": "f74d0d7c-d31d-49d9-84ff-c0889bf37771"},{"companyName": "腾南","expenseType": "差旅补贴","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{ER_EXP_FEE}>{ER_DAYS}*80","alertMessage": "您的补贴高于公司标准","ruleId": "154866b0-fdc5-433f-9c3f-640e9a812564"},{"companyName": "腾新","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}IN[总裁] AND {ER_EXP_FEE}>{ER_DAYS}*600","alertMessage": "您的房费高于公司标准","ruleId": "e4ece4c7-f9ca-46fc-bb7b-2a4443513daf"},{"companyName": "腾新","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}NOT IN[总裁] AND {ER_EXP_FEE}>{ER_DAYS}*500","alertMessage": "您的房费高于公司标准","ruleId": "51768055-8a13-4d44-9c61-e261bcb74149"},{"companyName": "腾新","expenseType": "住宿费","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{EXP_LEVEL}NOT IN[总裁] AND {ER_LOCATION}NOT IN[北京/上海/深圳/成都/广州/杭州] AND {ER_EXP_FEE}>{ER_DAYS}*400","alertMessage": "您的房费高于公司标准","ruleId": "0d3f86b6-f937-4544-916d-8fac5061c479"},{"companyName": "腾新","expenseType": "差旅补贴","applyPoint": "ER_SUBMIT","ruleAction": "REJECT","rule": "{ER_EXP_FEE}>{ER_DAYS}*100","alertMessage": "您的补贴高于公司标准","ruleId": "a9c0f423-7880-4f86-a761-ba2f2ec83c66"}
]

excel-parser的具体使用文档见官方地址。不过,此工具利用orm思想大大简化了我们的Excel文件向java实体类转换的工作量,也带有点小瑕疵。不过,知道其背后原理(excel读取,java反射)我们可以自己实现。

感谢作者的小工具

利用orm思想实现java读取Excel文件相关推荐

  1. java读取jsp文件内容_使用Java读取Excel文件内容

    问题:我能用Java读取一个Excel文件吗?如果能,怎么做? 回答:是的,可以用Java读取Microsoft Excel文件.微软提供了一个Excel的ODBC驱动程序,因此我们就可以使用JDBC ...

  2. 【Apache POI】Java 读取Excel文件

    Excel内容如下: 封装Excel行列字段的Bean: public class Employee {private String name;private String gender;privat ...

  3. java 读取excel 文件 Unable to recognize OLE stream 错误

    使用 java 代码读取 excel 文件代码时报错如下: jxl.read.biff.BiffException: Unable to recognize OLE stream     at jxl ...

  4. java读取Excel文件,用JDBC导入数据到mysql

    本需求最重要的就是如何将Excel文件中的数据读取到java集合中.首先要知道Excel表格中的每行记录即为一个对象,我们可以使用操作Excel的org.apache.poi框架,对数据进行读取.首先 ...

  5. Java 读取excel文件内容插入到数据库

    Java读写Excel的包是Apache POI. JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel ...

  6. Java读取Excel文件数据并将记录写入到新的文件中--POI技术实现

    1. apache poi包里有4个主要的类: Workbook----工作表,通过WorkbookFactory的create(FileInputStream fis)方法获取, Sheet---- ...

  7. java读取excel文件单元格英文出现乱码问题的解决方法

    小编今天测试读取excel文件,并且取其中的几个单元格作为文件名称的时候,发现文件名出现了乱码,毫无疑问,肯定就是读取excel的时候,取出来就出现了乱码,如图所示 excel原单元格数据,如图所示 ...

  8. Java 读取 Excel 文件内容, 根据 pdf 模板动态生成对应的 pdf 文件

    1. 下载 adobe acrobat https://www.cr173.com/soft/11135.html 2. 编辑 pdf 模板 1用 acrobat 打开 pdf 编辑模板 添加表单元素 ...

  9. Java 读取excel文件 兼容97-2013 V2.0

    注释里有struts的上传文件和Springmvc有些不一样.读写都是一样的 修复删除缓存文件占用的问题 package com.telling.cw.util.poi;import org.apac ...

最新文章

  1. 被批伪开源!刚刚融资6千万美元的Redis怎么了?
  2. Linux shell if [ -n ] 正确使用方法
  3. C++ Primer 5th笔记(chap 18 大型程序工具)类型转换与多个基类
  4. 12月16日要做的事
  5. UpdatePanel Repeater内LinkButton造成页面刷新问题
  6. 阿里云携手晞司盖工业,赋能设备制造商制造+服务转型升级
  7. 宏碁电脑BIOS没有usb启动项怎么办?
  8. 第九周 作业管理系统成本估算
  9. semi-suppervised learning 半监督学习
  10. cad2016中选择全图字体怎么操作_cad教程分享CAD如何替换找不到的原文字体?
  11. Python——河神小游戏
  12. 启辰r30近光灯远光灯保险盒,近光灯故障处理
  13. 电脑卡顿反应慢解决办法
  14. 闲置电脑搭建一台linux服务器,在局域网内访问
  15. 如何构建可持续的ChatGPT高性能服务器端架构?
  16. C语言编程题——杨氏矩阵
  17. leetcode76 904
  18. 入耳式降噪蓝牙耳机哪款好用?主动降噪耳机排行榜10强!
  19. 游戏开发笔记十六 讲解一个完整的回合制游戏demo
  20. 【报表开发】:BI---新视界---请休假个人报表

热门文章

  1. kafka 简单安装以及java小demo
  2. 神州数码易拓TIPTOP ERP集成WEB应用(使用Flexigrid插件)
  3. 解决Revit导出FBX模型材质丢失的问题
  4. MC6C迈克/FLYSKY富斯/WFLY2天地飞二代接收机远程刷固件教程
  5. 中科大教授耗时11年解决两大数学猜想,他是第三位获西蒙斯奖华人数学家
  6. Windows上使用C#控制台应用程序打开指定路径的文件
  7. 龙芯3A4000 pmon编译方法
  8. 用 python 脚本+ffmpeg,把当前目录及子目录下的 wma音频文件转换为mp3 格式
  9. win10计算机本地连接属性在哪里找,Windows10本地连接图标不见了的原因和解决方案...
  10. 英文计算机简历,计算机英文简历