手机
当前位置:查字典教程网 >编程开发 >Java >java实现excel导入数据的工具类
java实现excel导入数据的工具类
摘要:导入Excel数据的工具类,调用也就几行代码,很简单的。复制代码代码如下:importjxl.Cell;importjxl.Sheet;im...

导入Excel数据的工具类,调用也就几行代码,很简单的。

复制代码 代码如下:

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.read.biff.BiffException;

import org.apache.commons.beanutils.BeanUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.io.IOException;

import java.io.InputStream;

import java.util.*;

/**

* Excel导入的工具类.

*/

public class ExcelUtils {

private static final Logger logger = LoggerFactory.getLogger(ExcelUtils.class);

//成功

public static final Integer STATUS_OK = Integer.valueOf(1);

//失败

public static final Integer STATUS_NO = Integer.valueOf(0);

/**

* 私有化构造器

*/

private ExcelUtils(){

}

/**

* 获取excel文件中的数据对象

*

* @param is excel

* @param excelColumnNames excel中每个字段的英文名(应该与pojo对象的字段名一致,顺序与excel一致)

* @return excel每行是list一条记录,map是对应的"字段名-->值"

* @throws Exception

*/

public static List<Map<String, String>> getImportData(InputStream is, List<String> excelColumnNames) throws Exception {

logger.debug("InputStream:{}", is);

if (is == null) {

return Collections.emptyList();

}

Workbook workbook = null;

try {

//拿到excel

workbook = Workbook.getWorkbook(is);

} catch (BiffException e) {

logger.error(e.getMessage(), e);

return Collections.EMPTY_LIST;

} catch (IOException e) {

logger.error(e.getMessage(), e);

return Collections.EMPTY_LIST;

}

logger.debug("workbook:{}", workbook);

if (workbook == null) {

return Collections.emptyList();

}

//第一个sheet

Sheet sheet = workbook.getSheet(0);

//行数

int rowCounts = sheet.getRows() - 1;

logger.debug("rowCounts:{}", rowCounts);

List<Map<String, String>> list = new ArrayList<Map<String, String>>(rowCounts - 1);

//双重for循环取出数据

for(int i = 1; i < rowCounts; i++){

Map<String, String> params = new HashMap<String, String>();

//i,j i:行 j:列

for(int j = 0; j < excelColumnNames.size(); j++){

Cell cell = sheet.getCell(j, i);

params.put(excelColumnNames.get(j), cell.getContents());

}

list.add(params);

}

return list;

}

/**

* 获取导入数据为对象的List

*

* @param data

* @param clazz

* @param excelColumnNames

* @param checkExcel

* @param <T>

* @return

* @throws Exception

*/

public static <T> List<T> makeData(List<Map<String, String>> data, Class<T> clazz, List<String> excelColumnNames, CheckExcel checkExcel) throws Exception {

if(data == null || data.isEmpty() || clazz == null || checkExcel == null) {

return Collections.EMPTY_LIST;

}

List<T> result = new ArrayList<T>(data.size());

for(Map<String, String> d : data) {

if(checkExcel != null && !checkExcel.check(d)) {

continue;

}

T entity = clazz.newInstance();

for(String column : excelColumnNames) {

BeanUtils.setProperty(entity, column, d.get(column));

}

result.add(entity);

}

return result;

}

}

检查excel中每一行的数据是否合法

复制代码 代码如下:

import java.util.Map;

/**

* 检查excel中每一行的数据是否合法

*/

public interface CheckExcel {

/**

* 返回true合法

*

* @param data excel中每一行的数据

* @return

*/

public boolean check(Map<String, String> data);

}

调用部分

复制代码 代码如下:

List<Map<String, String>> data = ExcelUtils.getImportData(is,Constants.EXCEL_COLUMN_NAMES);

List<FeeAllocation> allocations = ExcelUtils.makeData(data, FeeAllocation.class, Constants.EXCEL_COLUMN_NAMES, new CheckExcel() {

public boolean check(Map<String, String> data) {

if(StringUtils.isEmpty(data.get("name")))

return false;

return true;

}

});

【java实现excel导入数据的工具类】相关文章:

java中文转全拼工具类分享

用Java实现希尔排序的示例

java从mysql导出数据的具体实例

使用java代码实现保留小数点的位数

Java实现九九乘法表的小例子

用java实现冒泡排序算法

redis实现多进程数据同步工具代码分享

Java通过接口实现匿名类的实例代码

java小数位的例子

java连接mysql数据库乱码的解决方法

精品推荐
分类导航