在一次开发中,需要做excle数据导入。
开发中我发现,将一列作为一个对象来进行处理,可以大大的方便程序的操作.
package com.wac.business.filedataconvey.excle;
import ognl.Ognl;
import ognl.OgnlException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.wac.business.filedataconvey.util.ExcleUtil;
import com.wac.business.filedataconvey.util.MsgBuilder;
public class ExcleColumn {
//普通列
public final static int COLUMN_TYPE_COMMON = 0;
//金额列
public final static int COLUMN_TYPE_MONEY = 1;
//时间列
public final static int COLUMN_TYPE_DATE = 2;
//带下拉列
public final static int COLUMN_TYPE_LIST = 3;
//单元格允许填入的字符的最大长度
public final static int MAX_LENGTH = 100;
private HSSFWorkbook workbook = null;
private String dataSheetName;
private String referenceSheetName;
private boolean emptyCellAllowed = false;
private int posStartRow;
private int size;
private int colIndex;
private String propertyName;
private int columnType;
private String errorMsg;
private ListMap<String, String> vs = null;
public ExcleColumn(HSSFWorkbook workbook) {
if (workbook == null)
throw new NullPointerException("workbook is null");
this.workbook = workbook;
}
public String getDataSheetName() {
return dataSheetName;
}
public void setDataSheetName(String dataSheetName) {
this.dataSheetName = dataSheetName;
}
public void setReferenceSheetName(String referenceSheetName) {
this.referenceSheetName = referenceSheetName;
}
public boolean isEmptyCellAllowed() {
return emptyCellAllowed;
}
public void setEmptyCellAllowed(boolean emptyCellAllowed) {
this.emptyCellAllowed = emptyCellAllowed;
}
public int getPosStartRow() {
return posStartRow;
}
public void setPosStartRow(int posStartRow) {
this.posStartRow = posStartRow;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getColIndex() {
return colIndex;
}
public void setColIndex(int colIndex) {
this.colIndex = colIndex;
}
public String getPropertyName() {
return propertyName;
}
public void setPropertyName(String propertyName) {
this.propertyName = propertyName;
}
public int getColumnType() {
return columnType;
}
public void setColumnType(int columnType) {
this.columnType = columnType;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public ListMap<String, String> getVs() {
return vs;
}
public void setVs(ListMap<String, String> vs) {
this.vs = vs;
}
public HSSFWorkbook getWorkbook() {
return workbook;
}
public HSSFSheet getDataSheet() {
return workbook.getSheet(this.dataSheetName);
}
public HSSFSheet getRefSheet() {
return workbook.createSheet(this.referenceSheetName + colIndex);
}
/**
*
* @param rowIndex 行
* @return
*/
public HSSFCell getCell(int rowIndex) {
HSSFSheet sheet = workbook.getSheet(this.dataSheetName);
HSSFRow row = sheet.getRow(rowIndex);
HSSFCell cell = row.getCell(this.colIndex);
return cell;
}
public Object getValue(int rowIndex, MsgBuilder mb) {
if (rowIndex < posStartRow || rowIndex >= posStartRow + size) {
throw new IllegalAccessError("请求解析的行超出了可以解析行的范围");
}
Object o = ExcleUtil.parseCell(this,rowIndex);
if (o == null&&!isEmptyCellAllowed()) {
if (getCell(rowIndex) == null) {
HSSFSheet sheet = workbook.getSheet(this.dataSheetName);
HSSFRow row = sheet.getRow(rowIndex);
HSSFCell cell=row.createCell(this.colIndex);
mb.add(cell, errorMsg);
} else
mb.add(getCell(rowIndex), errorMsg);
return null;
}
return o;
}
public void setBeanValue(int rowIndex, MsgBuilder mb, Object bean) {
Object o = getValue(rowIndex, mb);
if (o != null)
try {
Ognl.setValue(propertyName, bean, o);
} catch (OgnlException e) {
// TODO Auto-generated catch block
throw new IllegalAccessError();
}
else {
//如果为空,检查是否允许为空
if (!isEmptyCellAllowed())
throw new RuntimeException("先检查数据在做保持操作!");
}
}
}
1.首先抽象出了4类列
下拉列表,日期,金额,普遍
2.方法:
getCell(int rowIndex) 获取该对象在某行的cell对象
parse(int rowIndex,MsgBuilder mb) 解析该对象在某列的cell的值
setProperty(int rowIndex,MsgBuilder,Object o) 上一个方法的更高级的方法,实际上这个方法是要依赖上一方法的,而且考虑到内存的消耗,所以要调用parse对excle进行检查,然后调用setProperty 进行数据提取被封装到bean中.
分享到:
相关推荐
【标题】"poi简单的封装工具"涉及到的主要知识点是Java中的Apache POI库,这是一个用于处理Microsoft Office格式文件的开源库,特别适用于Excel文件的操作。在Java编程中,Apache POI库提供了一种方便的方式来创建、...
这种封装通常会创建一个或多个高级接口,隐藏了底层复杂的细节,让调用者能更简单、直观地完成Excel文件的导出操作。 Apache POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个...
1. **工作簿和工作表操作**:封装`Workbook`和`Sheet`的创建、读取和保存,提供简单的API如`createWorkbook()`,`readWorkbook()`,`saveWorkbook()`。 2. **单元格数据处理**:对`Row`和`Cell`的读写进行封装,例如`...
这就是如何在iOS应用中集成高德地图POI搜索功能并进行封装,使得调用变得简单易行。这个过程涉及到地图SDK的集成、搜索请求的创建与发送、以及结果的处理和显示。通过封装,可以更好地管理和复用搜索逻辑,提升代码...
对poi导出excel进行了二次封装,封装后只需要使用模板导出excel就可以了,简单易用,example包里面有几个实例,可以看看,该工程已经上传到github上了,有兴趣的同学可以一起来改进它,...
基于poi对excel操作的简单封装及必要的poi3.17包。针对excel文件或输入流,按行或者单元格解析处理,提供简单的通用单元格数据获取方法(数字类单元格返回Double, 日期返回Date, 公式返回计算后的结果,其它返回...
本篇文章将深入探讨如何使用Apache POI对Excel文件进行简单的封装,以便在Java项目中更方便地操作Excel数据。 首先,我们需要了解Apache POI的基本概念。POI提供了HSSF和XSSF两个API,分别用于处理老版本的BIFF8...
Poi的运用,对poi进行了简单封装,可以上传,下载客户资料,可以读取模板下载客户资料
本例采用javabean + 注解的方式,对POI进行了封装,旨在针对不同的Excel文档用同样的方法处理,已到达代码的重复利用。该jar包包含导入 Import 和导出 Export Excel两部分。 (一)导入: /** * 描述: Excel 导入...
jXLS提供了一种模板语法,使得开发者可以通过简单的占位符如`${key}`来动态填充数据。这种语法支持条件判断,例如`${key==1?"asdf":""}`,这表示如果`key`的值等于1,单元格将显示"asdf",否则显示空字符串。 在...
为更方便的使用POI的API来操作Excel(2003)文件,对POI中针对Excel文件的读写进行了简单封装。此类中包含以下功能: 1.根据模板创建Excel文件 2.获取及更新Excel文件内容 3.创建、复制Sheet 4.设置Sheet名称 ... ...
【标题】"easypoi POI封装工具类 office开发模板导入导出"涉及的核心知识点是Java中的easypoi库以及Apache POI项目,它们主要用于处理Microsoft Office文档,如Excel、Word和PowerPoint。easypoi是对Apache POI进行...
只实现了简单的excel导入导出,不支持特殊模版的定义。 里面包含的知识点(适合初学者学习的demo): 1、poi-excel 基本操作(工具) 2、自定义注解的使用 3、全局异常捕获的定义 4、jkd1.8新特性:Lambda 表达式 、...
在"poi解析导入word (简单Demo使用)"这个主题中,我们将深入探讨如何使用Apache POI库来读取、修改和创建Word文档。这个项目包含了一个POM文件(项目对象模型),一个Demo示例,以及一个docx文件,提供了完整的导入...
标题 "简单poi导入excel2003 与2007" 暗示了这个压缩包中的内容可能涉及使用Apache POI库来处理不同版本的Excel文件,主要是Excel 2003和2007。Apache POI是Java中广泛使用的库,用于读取和写入Microsoft Office格式...
为了避免此次坑,我们需要对其进行简单的封装,使得Row对象不被重复创建,确保指定行的Row对象只能创建一次。 我们可以使用getInstance()方法来获取Row对象,而不是使用默认的createRow()方法。这可以避免Row对象的...
10. **最佳实践**: 在实际项目中,建议将POI操作封装为服务或工具类,以提高代码复用性和可维护性。 Apache POI库的强大之处在于其灵活性和广泛的兼容性,它为Java开发者提供了一种强大且易用的方式来处理Excel文件...
这通常需要引入如Android-POI这样的库,它是对Apache POI的轻量级封装,适合Android平台使用。 1. **集成Apache POI到Android项目** 在Android Studio中,可以通过Gradle依赖管理来添加Android-POI库。在项目的...
通过POI3.9驱动模式读取excel2007时,对含有空的单位格处理实现,使用起来很简单了
版本:4.1.0 jar包个数:7个 apache的poi,操作Excel的包,亲测 jdk11 maven项目环境下包含本地jar使用有效,并给出了简单易用的封装。 传送门:我的博文:基于poi4.1.0的Excel表读写操作 日期:2020.12.15日