POI读取Excel2003和Excel2007(代码)

这篇博客介绍了如何使用Apache POI库来读取Excel2003和2007文件。针对Excel2003,通过HSSFEventUserModel事件模型实现低内存读取,包括处理各种类型的记录,如BlankRecord、LabelRecord等。对于Excel2007,采用XSSFReader和SAX解析器进行数据处理,减少内存占用。同时,定义了一个RowProcessor接口用于处理读取到的行数据。
摘要由CSDN通过智能技术生成

1. 读取Excel2003

import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;
import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BlankRecord;
import org.apache.poi.hssf.record.BoolErrRecord;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.FormulaRecord;
import org.apache.poi.hssf.record.LabelRecord;
import org.apache.poi.hssf.record.LabelSSTRecord;
import org.apache.poi.hssf.record.NumberRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.RecordFormatException;
import org.apache.poi.hssf.record.SSTRecord;
import org.apache.poi.hssf.record.StringRecord;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import fhszreport.tool.LogTool;

/**
 * Excel 97-2003数据读取类
 *
 * @author darrenlin
 */
public class Excel2003Reader implements HSSFListener
{
    
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    private SSTRecord sstRecord;
    private FormatTrackingHSSFListener formatListener;

    /**
     * 当前Sheet索引
     */
    private int sheetIndex = -1;

    private BoundSheetRecord[] orderedBSRs;
    private List<BoundSheetRecord> boundSheetRecords = new ArrayList<BoundSheetRecord>();
    private int nextColumn;
    private boolean outputNextStringRecord;

    /**
     * 当前行
     */
    private int curRow = 0;

    /**
     * 存储行记录的容器
     */
    private List<String> rowlist = new ArrayList<String>();

    /**
     * 当前Sheet名
     */
    private String currentSheetName;

    /**
     * 当前Sheet索引
     */
    private Integer currentSheetIndex = 0;

    /**
     * 要处理的目标Sheet名
     */
    private String targetSheetName = "";
    
    /**
     * 要处理的目标Sheet索引
     */
    private Integer targetSheetIndex = null;

    public void setTargetSheetName(String targetSheetName)
    {
        this.targetSheetName = targetSheetName;
    }
    
    public void setTargetSheetIndex(Integer targetSheetIndex)
    {
        this.targetSheetIndex = targetSheetIndex;
    }

    /**
     * 行数据处理对象
     */
    private RowProcessor rowReader;

    public void setRowReader(RowProcessor rowReader)
    {
        this.rowReader = rowReader;
    }

    /**
     * 主处理函数
     *
     * @param targetFile 目标文件路径
     * @param logType 日志记录类型
     * @throws IOException IO异常
     */
    public void process(String targetFile, String logType) throws IOException
    {
        // 读取Excel流文件
        FileInputStream file = new FileInputStream(targetFile);
        POIFSFileSystem fs = new POIFSFileSystem(file);

        // 创建HSSFListener
        MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
        formatListener &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值