poi事件模式读取excel

引入jar包 


    </dependencies>
        <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi-ooxml</artifactId>
         <version>3.15</version>
        </dependency>    
        <dependency>
            <groupId>com.syncthemall</groupId>
            <artifactId>boilerpipe</artifactId>
            <version>1.2.1</version>
        </dependency>
    </dependencies>

关键代码工具类


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.xssf.model.SharedStringsTable;
import org.springframework.stereotype.Component;
import org.xml.sax.helpers.DefaultHandler;

import java.io.InputStream;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

@Component
public class ExcelUtil extends DefaultHandler {

    private SharedStringsTable sst;
    private String lastContents;
    private boolean nextIsString;

    private int sheetIndex = -1;
    //存储某一行的数据
    private List<String> rowlist = new ArrayList<String>();
    private int curRow = 0;
    private int curCol = 0;
    private String col = "";
    //存储某个sheet的数据
    private List<List<String>> list = new ArrayList<>();
    //存储整个excel的数据
    private List<List<List<String>>> data;


    public static void main(String[] args) throws Exception {
        new ExcelUtil().process("C:\\Users\\zhang\\Desktop\\1-50蔡晨浩等人案件要素 - 删空白行和列(1).xlsx");
    }


    /**
     * 读取第一个工作簿的入口方法
     *
     * @param path
     */
    public void readOneSheet(String path) throws Exception {
        OPCPackage pkg = OPCPackage.open(path);
        XSSFReader r = new XSSFReader(pkg);
        SharedStringsTable sst = r.getSharedStringsTable();

        XMLReader parser = fetchSheetParser(sst);

        InputStream sheet = r.getSheet("rId1");

        InputSource sheetSource = new InputSource(sheet);
        parser.parse(sheetSource);

        sheet.close();
    }


    /**
     * 读取所有工作簿的入口方法
     *
     * @param path
     * @throws Exception
     */
    public List<List<List<String>>> process(String path) throws Exception {
        data = new ArrayList<>();
        OPCPackage pkg = OPCPackage.open(path);
        XSSFReader r = new XSSFReader(pkg);
        SharedStringsTable sst = r.getSharedStringsTable();

        XMLReader parser = fetchSheetParser(sst);

        Iterator<InputStream> sheets = r.getSheetsData();
        while (sheets.hasNext()) {
//            System.out.println("换了个sheet=========================================================");
            curRow = 0;
            sheetIndex++;
            InputStream sheet = sheets.next();
            InputSource sheetSource = new InputSource(sheet);
            parser.parse(sheetSource);
            data.add(list);
            list = new ArrayList<>();
            sheet.close();
        }
        return data;
    }

    /**
     * 该方法自动被调用,每读一行调用一次,在方法中写自己的业务逻辑即可
     *
     * @param sheetIndex 工作簿序号
     * @param curRow     处理到第几行
     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值