Excel百万数据的读取

Posted lovoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel百万数据的读取相关的知识,希望对你有一定的参考价值。

一、定义一个数据处理的Handler

/**
 * 百万数据读取处理
 * @Package com.wys.hrm.common.utils.poi
 * @Author charlin
 * @Version: v1.0
 * @Date 2021-08-279:24
 * @Copyright: 2021 www.wyscha.com Inc. All rights reserved.
 */
public class SheetHandler implements XSSFSheetXMLHandler.SheetContentsHandler {

    private PoiEntity poiEntity;
    /**
     * 当开始解析某一行时触发
     * @param i 行的索引
     */
    @Override
    public void startRow(int i) {
        if(i > 0){
            poiEntity = new PoiEntity();
        }
    }

    /**
     * 当结束某一行时触发
     * @param i
     */
    @Override
    public void endRow(int i) {
        //可以实现保存到数据库的业务逻辑
        System.out.println(poiEntity);
    }

    /**
     * 对行中的每一个表格进行处理
     * @param cellName  单元格名称
     * @param value  单元格值
     * @param xssfComment 批注
     */
    @Override
    public void cell(String cellName, String value, XSSFComment xssfComment) {
        if(poiEntity != null){
            String pref = cellName.substring(0, 1);
            switch (pref){
                case "A":
                    poiEntity.setId(value);
                    break;
                case "B":
                    poiEntity.setBreast(value);
                    break;
                case "C":
                    poiEntity.setAdipocytes(value);
                    break;
                case "D":
                    poiEntity.setNegative(value);
                    break;
                case "E":
                    poiEntity.setStaining(value);
                    break;
                case "F":
                    poiEntity.setSupportive(value);
                    break;
                default:
                    break;
            }
        }
    }

}

百万数据导入测试实体类,每个字段表示列的主题

@Data
public class PoiEntity {

    private String id;

    private String breast;

    private String adipocytes;

    private String negative;

    private String staining;

    private String supportive;
}

二、导入方法实现

/**
 * 百万数据读取导入
 * @Package com.wys.hrm.common.utils.poi
 * @Author charlin
 * @Version: v1.0
 * @Date 2021-08-279:51
 * @Copyright: 2021 www.wyscha.com Inc. All rights reserved.
 */
public class ExcelBigDataImportUtil {

    public static void main(String[] args) {
        try {
            importExcel("E:\\\\project\\\\my\\\\java\\\\wyshrm\\\\file\\\\excel\\\\demo.xlsx");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void importExcel(String url) throws Exception {
        //1、根据excel获取OpcPackage 压缩包
        OPCPackage opcPackage = OPCPackage.open(url, PackageAccess.READ);
        //2、创建XSSReader
        XSSFBReader reader = new XSSFBReader(opcPackage);
        //3、获取SharedStringTable
        SharedStringsTable sharedStringsTable = reader.getSharedStringsTable();
        //4、获取
        StylesTable stylesTable = reader.getStylesTable();
        //5、创建xmlreader
        XMLReader xmlReader = XMLReaderFactory.createXMLReader();
        //6、注册事件
        XSSFSheetXMLHandler xmlHandler = new XSSFSheetXMLHandler(stylesTable, sharedStringsTable, new SheetHandler(), false);
        xmlReader.setContentHandler(xmlHandler);
        //7、逐行读取
        XSSFReader.SheetIterator sheetIterator = (XSSFReader.SheetIterator) reader.getSheetsData();
        while (sheetIterator.hasNext()){
            InputStream inputStream = sheetIterator.next();
            InputSource inputSource = new InputSource(inputStream);
            //8、解析数据
            xmlReader.parse(inputSource);
        }
    }
}

以上是关于Excel百万数据的读取的主要内容,如果未能解决你的问题,请参考以下文章

Excel百万数据的读取

利用POI操作Excel实现百万数据写入

如何用java导入Excel数据到数据库?

Java-poi-excel-对空值单元格的读取

easyexcel大数据量(百万数据),写入到excel

怎么用java程序把excel导入到mysql数据库