最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)excel導(dǎo)入數(shù)據(jù)的工具類

 更新時(shí)間:2014年03月11日 14:16:33   作者:  
這篇文章主要介紹了java實(shí)現(xiàn)的excel導(dǎo)入數(shù)據(jù)的工具類,需要的朋友可以參考下

導(dǎo)入Excel數(shù)據(jù)的工具類,調(diào)用也就幾行代碼,很簡單的。

復(fù)制代碼 代碼如下:

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導(dǎo)入的工具類.
 */
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);
    /**
     * 私有化構(gòu)造器
     */
    private ExcelUtils(){

    }

    /**
     * 獲取excel文件中的數(shù)據(jù)對象
     *
     * @param is                        excel
     * @param excelColumnNames          excel中每個(gè)字段的英文名(應(yīng)該與pojo對象的字段名一致,順序與excel一致)
     * @return                          excel每行是list一條記錄,map是對應(yīng)的"字段名-->值"
     * @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();
        }

        //第一個(gè)sheet
        Sheet sheet = workbook.getSheet(0);
        //行數(shù)
        int rowCounts = sheet.getRows() - 1;
        logger.debug("rowCounts:{}", rowCounts);
        List<Map<String, String>> list = new ArrayList<Map<String, String>>(rowCounts - 1);

        //雙重for循環(huán)取出數(shù)據(jù)
        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;
    }

    /**
     * 獲取導(dǎo)入數(shù)據(jù)為對象的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中每一行的數(shù)據(jù)是否合法

復(fù)制代碼 代碼如下:

import java.util.Map;
/**
 * 檢查excel中每一行的數(shù)據(jù)是否合法
 */
public interface CheckExcel {
    /**
     * 返回true合法
     *
     * @param data      excel中每一行的數(shù)據(jù)
     * @return
     */
    public boolean check(Map<String, String> data);
}

調(diào)用部分

復(fù)制代碼 代碼如下:

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;
            }
        });

相關(guān)文章

  • JavaWeb中的組件Filter過濾器解析

    JavaWeb中的組件Filter過濾器解析

    這篇文章主要介紹了JavaWeb中的組件Filter過濾器解析,Filter過濾器是一種用于處理和轉(zhuǎn)換數(shù)據(jù)的工具,常用于Web開發(fā)中,它可以在請求到達(dá)服務(wù)器之前或響應(yīng)返回給客戶端之前對數(shù)據(jù)進(jìn)行預(yù)處理或后處理,需要的朋友可以參考下
    2023-10-10
  • springboot+mybatis快速插入大量數(shù)據(jù)的具體實(shí)現(xiàn)

    springboot+mybatis快速插入大量數(shù)據(jù)的具體實(shí)現(xiàn)

    最近導(dǎo)入表格數(shù)據(jù)時(shí)需要同時(shí)插入修改大量數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot+mybatis快速插入大量數(shù)據(jù)的具體實(shí)現(xiàn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Java使用NIO包實(shí)現(xiàn)Socket通信的實(shí)例代碼

    Java使用NIO包實(shí)現(xiàn)Socket通信的實(shí)例代碼

    本篇文章主要介紹了Java使用NIO包實(shí)現(xiàn)Socket通信的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • java中MultipartFile和File最簡單的互相轉(zhuǎn)換示例

    java中MultipartFile和File最簡單的互相轉(zhuǎn)換示例

    這篇文章主要給大家介紹了關(guān)于java中MultipartFile和File最簡單的互相轉(zhuǎn)換的相關(guān)資料,MultipartFile和File都是Java中用于處理文件上傳的類,MultipartFile用于處理上傳的文件,File用于處理本地磁盤上的文件,需要的朋友可以參考下
    2023-09-09
  • Java線程間通信不同步問題原理與模擬實(shí)例

    Java線程間通信不同步問題原理與模擬實(shí)例

    這篇文章主要介紹了Java線程間通信不同步問題,結(jié)合實(shí)例形式分析了java線程間通信不同步問題的原理并模擬實(shí)現(xiàn)了線程間通信不同步情況下的異常輸出,需要的朋友可以參考下
    2019-10-10
  • Spring Boot中實(shí)現(xiàn)定時(shí)任務(wù)應(yīng)用實(shí)踐

    Spring Boot中實(shí)現(xiàn)定時(shí)任務(wù)應(yīng)用實(shí)踐

    定時(shí)任務(wù)一般是項(xiàng)目中都需要用到的,可以用于定時(shí)處理一些特殊的任務(wù)。下面這篇文章主要給大家介紹了關(guān)于Spring Boot中實(shí)現(xiàn)定時(shí)任務(wù)應(yīng)用實(shí)踐的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-05-05
  • springboot中EasyPoi實(shí)現(xiàn)自動(dòng)新增序號的方法

    springboot中EasyPoi實(shí)現(xiàn)自動(dòng)新增序號的方法

    本文主要介紹了EasyPoi實(shí)現(xiàn)自動(dòng)新增序號,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java Resource路徑整理總結(jié)

    Java Resource路徑整理總結(jié)

    這篇文章主要介紹了 Java Resource路徑整理總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java線程池使用與原理詳解

    Java線程池使用與原理詳解

    這篇文章主要為大家詳細(xì)介紹了Java線程池使用與原理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 一文帶你秒懂Java為什么只有值傳遞

    一文帶你秒懂Java為什么只有值傳遞

    值傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,引用傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的引用直接傳遞到函數(shù)中,本文將詳細(xì)介紹Java中值傳遞的相關(guān)知識,感興趣的可以了解下
    2024-11-11

最新評論

通榆县| 嫩江县| 海门市| 仲巴县| 曲沃县| 买车| 托克逊县| 耒阳市| 长泰县| 武宁县| 晋江市| 南靖县| 五峰| 额敏县| 武清区| 永胜县| 岐山县| 鲁甸县| 池州市| 河北省| 黄石市| 富锦市| 维西| 盐边县| 和龙市| 黔江区| 建阳市| 桐梓县| 满洲里市| 波密县| 峡江县| 洛宁县| 江达县| 滨海县| 南江县| 共和县| 方城县| 凤翔县| 体育| 福鼎市| 汝阳县|