poi上传解析execl

来源:互联网 发布:淘宝限时抢购在哪 编辑:程序博客网 时间:2024/05/24 06:48

工具类:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FilenameUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * Excel组件
 *  
 * @author Snowolf
 * @version 1.0
 * @since 1.0
 */  
public abstract class ExcelHelper {  
 
    /**
     * Excel 2003
     */  
    private final static String XLS = "xls";  
    /**
     * Excel 2007
     */  
    private final static String XLSX = "xlsx";  
    /**
     * 分隔符
     */  
    private final static String SEPARATOR = "@@";  
 
    /**
     * 由Excel文件的Sheet导出至List
     *  
     * @param file
     * @param sheetNum
     * @return
     */  
    public static List<String> exportListFromExcel(File file, int sheetNum)  
            throws IOException {  
        return exportListFromExcel(new FileInputStream(file),  
                FilenameUtils.getExtension(file.getName()), sheetNum);  
    }  
 
    /**
     * 由Excel流的Sheet导出至List
     *  
     * @param is
     * @param extensionName
     * @param sheetNum
     * @return
     * @throws IOException
     */  
    public static List<String> exportListFromExcel(InputStream is,  
            String extensionName, int sheetNum) throws IOException {  
 
        Workbook workbook = null;  
 
        if (extensionName.toLowerCase().equals(XLS)) {  
            workbook = new HSSFWorkbook(is);  
        } else if (extensionName.toLowerCase().equals(XLSX)) {  
            workbook = new XSSFWorkbook(is);  
        }  
 
        return exportListFromExcel(workbook, sheetNum);  
    }  
 
    /**
     * 由指定的Sheet导出至List
     *  
     * @param workbook
     * @param sheetNum
     * @return
     * @throws IOException
     */  
    private static List<String> exportListFromExcel(Workbook workbook,  
            int sheetNum) {  
 
        Sheet sheet = workbook.getSheetAt(sheetNum);  
 
        // 解析公式结果  
        FormulaEvaluator evaluator = workbook.getCreationHelper()  
                .createFormulaEvaluator();  
 
        List<String> list = new ArrayList<String>();  
 
        int minRowIx = sheet.getFirstRowNum();  
        int maxRowIx = sheet.getLastRowNum();  
        short maxColIx = 0;
        for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) {  
            Row row = sheet.getRow(rowIx);  
            StringBuilder sb = new StringBuilder();  
 
            //short minColIx = row.getFirstCellNum();  
            short minColIx = 0;
            if(maxColIx==0){
                maxColIx = row.getLastCellNum();
            }
            for (short colIx = minColIx; colIx <= maxColIx; colIx++) {  
                Cell cell = row.getCell(new Integer(colIx));  
                CellValue cellValue = evaluator.evaluate(cell);  
                if (cellValue == null) {
                     if(colIx != maxColIx){
                         sb.append(SEPARATOR + " ");
                     }
                    continue;  
                }  
                // 经过公式解析,最后只存在Boolean、Numeric和String三种数据类型,此外就是Error了  
                // 其余数据类型,根据官方文档,完全可以忽略http://poi.apache.org/spreadsheet/eval.html  
                switch (cellValue.getCellType()) {  
                case Cell.CELL_TYPE_BOOLEAN:  
                    sb.append(SEPARATOR + cellValue.getBooleanValue());  
                    break;  
                case Cell.CELL_TYPE_NUMERIC:  
                    // 这里的日期类型会被转换为数字类型,需要判别后区分处理  
                    if (DateUtil.isCellDateFormatted(cell)) {  
                        sb.append(SEPARATOR + cell.getDateCellValue());  
                    } else {  
                        DecimalFormat df = new DecimalFormat("0");
                        double nv = cellValue.getNumberValue();
                        if((int)nv == nv){
                            sb.append(SEPARATOR + df.format(cellValue.getNumberValue()));  
                        }else{
                            sb.append(SEPARATOR + cellValue.getNumberValue());
                        }
                    }  
                    break;  
                case Cell.CELL_TYPE_STRING:  
                    sb.append(SEPARATOR + cellValue.getStringValue());  
                    break;  
                case Cell.CELL_TYPE_FORMULA:  
                    break;  
                case Cell.CELL_TYPE_BLANK:  
                    break;  
                case Cell.CELL_TYPE_ERROR:  
                    break;  
                default:  
                    break;  
                }  
            }  
            list.add(sb.toString());  
        }  
        return list;  
    }  


调用:

                 List<String> list = null;
                 list = ExcelHelper.exportListFromExcel(new File(saveDirectoryPath+"/"+fileName), 0);

0 0
原创粉丝点击