author:邹凯明

poi-utils

help you more easy reading or writing[TODO] excel file

本工具包入口类是ExcelFileUtil,对于读取excel提供的是以下工具类:

ExcelFileUtil.readInputStreamToObject(InputStream workbookInputStream,ExcelFileReadSheetProcessor>... sheetProcessors);

第一个参数是Excel File的输入流,第二个参数是Sheet解析器,它是一个抽象类,含有三个必填的参数和两个必须实现的方法:

*sheetIndex或sheetName;//设置要解析哪一张sheet(based-0)

*targetClass;//设置读取的excel行数据将被解析的目标Bean Class

*fieldMapping;//设置excel列和Java Bean的字段映射[下面结束]

*void process(){ExcelFileReadContext context, List list};//解析Excel成功后后的回调,结果将由lis参数返回

*void onExcepton(RuntimeException e);//执行异常时的回掉,注意如果异常是ExcelFileException,你可以定位出解析excel异常的具体信息。

注:setStartRow;虽然不是必填项,但由于Excel中第一行通常是列名,真正的数据是从第1(based-0)行开始的,所以通常都会设置该参数;

类通过类(ExcelFileFieldMapping)将excel某一列和Java

Bean的某一字段建立映射关系,然后通过ExcelFileCellValueMapping/ExcelFileReadCellProcessor类

灵活处理单元格内容的具体转换,方便你能快速的实现Excel文件解析。

##this is a sample demo for reading excel file.

public static void main(String[] args) throws FileNotFoundException {

InputStream in = ExcelFileUtilTest.class.getResourceAsStream("/excel/xlsx/file1.xlsx");

ExcelFileReadSheetProcessor sheetProcessor = new ExcelFileReadSheetProcessor() {

public void process(ExcelFileReadContext context, List list) {

//这里处理解析excel成功后的结果

System.out.println(JSONObject.toJSONString(list));

}

public void onExcepton(RuntimeException e) {

//这里处理解析excel过程中的异常

if (e instanceof ExcelFileException) {

ExcelFileException ef = (ExcelFileException) e;

if (ef.getSystemErrorCode() == ExcelFileException.CODE_OF_CELL_VALUE_REQUIRED) {

System.out.println("第" + (ef.getRowIndex() + 1) + "行,第" + ef.getColStrIndex() + "列是必填项");

} else if (ef.getSystemErrorCode() == ExcelFileException.CODE_OF_CELL_VALUE_NOT_MATCHED) {

System.out.println("第" + (ef.getRowIndex() + 1) + "行,第" + ef.getColStrIndex() + "列数据不匹配");

} else {

System.out.println("第" + (ef.getRowIndex() + 1) + "行,第" + ef.getColStrIndex() + "列数据解析异常");

}

}

throw e;

}

};

ExcelFileFieldMapping fieldMapping = new ExcelFileFieldMapping();

fieldMapping.put("A", "tByte");//cell直接解析

fieldMapping.put("J", "tEnum1", new ExcelFileReadCellProcessor() {//cell自定义解析

public Object process(ExcelFileReadContext> context, Cell cell, ExcelFileCellValue cellValue) {

return cellValue.getStringValue() + "=>row:" + context.getCurRowIndex() + ",col:"

+ context.getCurColStrIndex();

}

});

ExcelFileCellValueMapping valueMapping = new ExcelFileCellValueMapping();

valueMapping.put("请选择", null);

valueMapping.put("枚举1", TestEnum.AA.toString());

valueMapping.put("枚举2", TestEnum.BB.toString());

fieldMapping.put("K", "tEnum2", valueMapping);//cell自定义解析

sheetProcessor.setSheetIndex(0);//设置从excel的第几张sheet开始解析(based-0)

sheetProcessor.setStartRow(1);//设置从excel的第几行开始解析(based-0)

sheetProcessor.setTargetClass(TestBean.class);//设置读取的excel行数据将被解析的目标Bean Class

sheetProcessor.setFieldMapping(fieldMapping);//设置excel列和Java Bean的字段映射

ExcelFileUtil.readInputStreamToObject(in, sheetProcessor);//执行解析

}

###详细实例请参考ExcelFileUtilTest类

easypoi必填项_GitHub - wangjingting/poi-utils: help you more easy read or write excel file相关推荐

  1. easypoi必填项_EasyExcel对Excel文件的解析过程

    POI与easyExcel的区别: . POI是通过WorkBook来解析表格文件的,虽然内部有使用到Sax模式,能后大大的提高效率,但是要解析大文件(10w,100w行)的话很容易出现OOM(内存溢 ...

  2. div.php织梦自定义表判断不能为空,织梦自定义表单字段为必填项的教程

    织梦自定义表单用的最多的就是制作留言板,报名等功能,但是添加的字段不填写就能提交,容易被恶意提交,为了防止这些,我们可以把这些字段选项设定为必填项. 方法如下: 1. 用php验证 在plus/diy ...

  3. ExtJS4为form表单必填项添加红色*标识

    通常情况下,ExtJS4的form表单必填项在输入状态下会有特殊提示,非输入状态下,显示却和其他项没有任何区别.为使必填项更加容易区分,我们需要根据allowBlank的属性值,为form表单中的必填 ...

  4. 【CSS系列】CSS 实现必填项前/后添加红色星号

    在一些必填项的标签加星,来提示用户,怎么实现呢?请看本文介绍的两种方法. 1 . 常规写法 <label><span style="color:red;"> ...

  5. layui自带验证体系:手机号验证、邮箱验证、必填项非空验证、数字验证(含代码、案例)

    layui自带验证体系:手机号验证.邮箱验证.必填项非空验证.数字验证(含代码.案例) 案例 · 截图: 实例代码: <!DOCTYPE html> <html> <he ...

  6. android textview 必填,在android中如何使用Html渲染的方式实现必填项前面的*号

    本篇文章主要介绍了android中使用Html渲染的方式实现必填项前面的*号示例,具有一定的参考价值,有兴趣的可以了解一下 项目的个人基本信息UI界面效果图如下,有一个红色的*号,并且跟它挨着的文字颜 ...

  7. python字典没有长度限制_python-字典更新序列元素#0的长度为15; 2个为必填项

    我正在将python / django应用程序从1.6.5升级到1.7.我在解决以下错误时遇到麻烦:字典更新序列元素#0的长度为15: 2个为必填项 这是回溯输出: Request Method: G ...

  8. SAP License:ERP系统会计凭证中的那些必填项

    01.凭证日期 凭证日期是必填的,凭证日期填写原始单据的日期. 02.过账日期 过账日期是必填的,凭证正式过账到系统的日期,系统默认凭证记账当日. 03.凭证类型 凭证类型是必填的,在SAP系统中,S ...

  9. 如何设置dedecms自定义表单必填项?

    用dedecms自定义表单可以制作一个简单的预约系统,有些相关信息需要设置为必填项,比如联系方式,没有留下真实的电话或其他信息,以后要怎么联系到你的客户.那我们要如何设置织梦cms自定义表单必填项呢? ...

最新文章

  1. java设计模式---合成模式2
  2. maven超级pom内容
  3. exchange离线整理数据库
  4. 计算机mac地址里面0,如何查计算机MAC地址
  5. 好程序员技术文档HTML5开发中的javascript闭包
  6. mysql 日志 设置 set_MySQL 慢查询日志的开启与配置
  7. mysql 恢复同步_常见MySQL同步错误恢复方法
  8. mysql 中的 engine 存储引擎
  9. LoadRunner测试ajax框架,回放后系统中没有产生数据解决方法
  10. 查询Mysql的数据架构信息研究
  11. java版本对应jdk版本_jdk版本对应数字
  12. apple 苹果官方的demo 下载地址
  13. java代码混淆(使用 ProGuard maven插件)
  14. react 截取视频随意一帧裁剪图片存为base64格式
  15. 【随机过程】笔记和习题分享 第一章 随机过程基本概念
  16. 简单实用算法——人民币金额大写转换
  17. IMDB算法(贝叶斯算法)
  18. oracle php 教程 pdf,AJAX+PHP+Oracle数据库Web开发 ((美)Lee Barney) 中文PDF扫描版 37.5M
  19. 电大c语言2017年1月,电大1253+C语言程序设计A(1月)小抄参考
  20. 数组和ArrayList的区别

热门文章

  1. 基于OpenCV的条形码区域分割
  2. PB 级数据处理挑战,Kubernetes如何助力基因分析?
  3. 揭秘:深度网络背后的数学奥秘
  4. Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能
  5. Java中String、StringBuffer和StringBuilder的区别
  6. HSQLDB安装与使用
  7. nodeJs-autoMerge
  8. redhat7企业版linuxlinux基本操作
  9. (原创)用c++11打造好用的any
  10. C/C++ 混合编程