您的位置:首页 > 其它

poi上传解析execl

2015-08-01 11:05 302 查看
工具类:

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: