JAVA Excel工具类-简洁读取

package com.jingsky.mv.util;

import com.jingsky.util.common.CollectionUtil;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.DateUtil;

import java.io.*;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;

/**
 * 封装对excel的操作,包括本地读写excel和流中输出excel,支持office 2007。
 * 依赖于poi-3.9-20121203.jar,poi-ooxml-3.9-20121203.jar,poi-ooxml-schemas-3.9-20121203.jar,dom4j-1.6.1.jar
 * 有参构造函数参数为excel的全路径
 * @author 老沙 QQ:862990787
 */
public class ExcelUtil {

    // excel文件流
    private InputStream inputStream;

    /**
     * 无参构造函数 默认
     */
    public  ExcelUtil() {
    }

    /**
     * 有参构造函数
     */
    public  ExcelUtil(InputStream inputStream) {
        this.inputStream= inputStream;;
    }

    /**
     * 读取某个工作簿上的所有单元格的值。
     * 作者:朱志杰
     * July 30, 2013 3:27:08 PM
     * @param sheetOrder 工作簿序号,从0开始。
     * @return List<Object[]> 所有单元格的值。
     * @throws IOException 加载excel文件IO异常。
     * @throws FileNotFoundException excel文件没有找到异常。
     * @throws InvalidFormatException
     */
    public List<Object[]> read(int sheetOrder) throws FileNotFoundException, IOException, InvalidFormatException{
        Workbook workbook = WorkbookFactory.create(this.inputStream);
        if(this.inputStream != null) {
            this.inputStream.close();
        }
        Sheet sheet = workbook.getSheetAt(sheetOrder);
        //用来记录excel值
        List<Object[]> valueList=new LinkedList<Object[]>();
        //循环遍历每一行、每一列。
        for(Row row : sheet){
            //每一行
            Object[] rowObject=null;
            //System.out.println(row.getLastCellNum());
            for(int i=0 ;i<row.getLastCellNum();i++){
                Cell cell=row.getCell(i);
                //System.out.println(cell==null);
                if(cell==null){
                    rowObject= CollectionUtil.addToArray(rowObject, "");
                    continue;
                }
                //cell.getCellType是获得cell里面保存的值的type
                switch(cell.getCellType()){
                    case Cell.CELL_TYPE_BOOLEAN:
                        //得到Boolean对象的方法
                        rowObject=CollectionUtil.addToArray(rowObject, cell.getBooleanCellValue());
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        //先看是否是日期格式
                        if(DateUtil.isCellDateFormatted(cell)){
                            //读取日期格式
                            rowObject=CollectionUtil.addToArray(rowObject, new com.jingsky.util.common.DateUtil(cell.getDateCellValue()).toLongDate());
                        }else{
                            DecimalFormat df = new DecimalFormat();
                            //单元格的值,替换掉,
                            String value=df.format(cell.getNumericCellValue()).replace(",","");
                            //读取数字
                            rowObject=CollectionUtil.addToArray(rowObject, value);
                        }
                        break;
                    case Cell.CELL_TYPE_FORMULA:
                        //读取公式
                        rowObject=CollectionUtil.addToArray(rowObject, cell.getCellFormula());
                        break;
                    case Cell.CELL_TYPE_STRING:
                        //读取String
                        rowObject=CollectionUtil.addToArray(rowObject, cell.getRichStringCellValue().toString());
                        break;
                    default:
                        //读取String
                        rowObject=CollectionUtil.addToArray(rowObject, cell.getRichStringCellValue().toString());
                }
            }
            //将这行添加到list。
            valueList.add(rowObject);
        }
        return valueList;
    }

    /**
     * 读取某个工作簿上的某个单元格的值。
     * 作者:朱志杰
     * Sep 19, 2012 3:27:08 PM
     * @param sheetOrder 工作簿序号,从0开始。
     * @param colum 列数 从1开始
     * @param row 行数 从1开始
     * @return 单元格的值。
     * @throws Exception 加载excel异常。
     */
    public String read(int sheetOrder,int colum, int row) throws Exception {
        Workbook workbook = WorkbookFactory.create(this.inputStream);
        if(this.inputStream != null) {
            this.inputStream.close();
        }
        Sheet sheet = workbook.getSheetAt(sheetOrder);
        Row rows = sheet.getRow(row-1);
        Cell cell = rows.getCell(colum-1);
        String content = cell.getStringCellValue();
        return content;
    }
}

 

posted @ 2023-10-24 14:13  沙琪玛  阅读(24)  评论(0编辑  收藏  举报