源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java实现excel导入数据的工具类

  • 时间:2021-01-19 21:11 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java实现excel导入数据的工具类
导入Excel数据的工具类,调用也就几行代码,很简单的。
[u]复制代码[/u] 代码如下:
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中每一行的数据是否合法
[u]复制代码[/u] 代码如下:
import java.util.Map; /**  * 检查excel中每一行的数据是否合法  */ public interface CheckExcel {     /**      * 返回true合法      *      * @param data      excel中每一行的数据      * @return      */     public boolean check(Map<String, String> data); }
调用部分
[u]复制代码[/u] 代码如下:
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;             }         });
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部