您的位置:首页 > 编程语言 > Java开发

java使用poi读取ecxel文件的工具类

2017-09-15 11:37 302 查看
导入jar包
 poi-3.8-20120326.jar

 poi-examples-3.8-20120326.jar

 poi-excelant-3.8-20120326.jar

 poi-ooxml-3.8-20120326.jar

 poi-ooxml-schemas-3.8-20120326.jar

 poi-scratchpad-3.8-20120326.jar

 xmlbeans-2.3.0.jar

/**

     * 读取excel文件并转换成list 空行不会被存到list数据已key等于列数value等于值的形式存到map行和列都是从0开始

     *

     * @param file

     *            要读取的excel文件

     *

     * @param header

     *            表头所占用行数 0表示无表头

     *

     * @param sheetNum

     *            要读取excel的第几张表

     *

     * @return

     */

    public static List<Map<Integer, String>> excelToList(File file, int headerNum, int sheetNum) {

        try {

            // 把所有读取到的数据存到一个list

            List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();

            // 把单行数据存到一个map

            Map<Integer, String> map = null;

            // 定义一个变量来记录此行是否为空行大于0表示此行有数据否则不会存到list

            int checkRow = 0;

            InputStream is = new FileInputStream(file);

            Workbook workbook = null;

            // 通过后缀来判断要是用的Workbook,xls是2003,xlsx是2007

            if ("xlsx".equals(StringUtil.getFileExt(file.getName()))) {

                workbook = new XSSFWorkbook(is);

            } else {

                workbook = new HSSFWorkbook(is);

            }

            // 得到第一个shell

            Sheet sheet = workbook.getSheetAt(sheetNum);

            // 得到Excel的行数

            int totalRows = sheet.getPhysicalNumberOfRows();

            int totalCells = 0;

            // 得到Excel的列数

            if (totalRows >= 1 && sheet.getRow(0) != null) {

                totalCells = sheet.getRow(0).getPhysicalNumberOfCells();

            }

            Row row = null;

            Cell cell = null;

            StringBuffer value = new StringBuffer("");

            // 循环Excel的行

            for (int r = 0; r < totalRows; r++) {

                row = sheet.getRow(r);

                if (row == null) {

                    continue;

                }

               

                map = new LinkedHashMap<Integer, String>();

                // 跳过表头

                if (r >= headerNum) {

                  

                    // 循环Excel的列

                    for (int c = 0; c < totalCells; c++) {

                        cell = row.getCell(c);                                               

                        // 值为null时转换成空字符

                        if (String.valueOf(cell) != null) {

                            // 防止数字自然数格式读取

                            switch (cell.getCellType()) {

                            case HSSFCell.CELL_TYPE_NUMERIC: // 数字

                                DecimalFormat format = new DecimalFormat("0");

                                value = new StringBuffer(format.format(cell.getNumericCellValue()).replaceAll("\\s*|\t|\r|\n", ""));

                                break;

                            case HSSFCell.CELL_TYPE_STRING: // 字符串

                                value = new StringBuffer(String.valueOf(cell).replaceAll("\\s*|\t|\r|\n", ""));

                                break;

                            }

                        } else {

                            value = new StringBuffer("");

                        }

                   

                        map.put(c, value + "");

                        if (!"".equals(value) && (value != null) && (value.length() != 0)) {

                            checkRow++;

                        }

                        // 存完一列数据清空value以免空列无法更新value

                         value = new StringBuffer("");

                    }

                    // checkRow大于表示此行有数据需要存到list

                    if (checkRow > 0) {

                        list.add(map);

                        // 重置list来记录下一行是否为空行

                        checkRow = 0;

                    }

               

                }

            }

            return list;

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: