• java常用工具类(三)—— Excel 操作工具


    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.NumberFormat;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author Lius
     * @date 2018/10/26 17:37
     * @description excel 表格工具
     */
    public class ExcelUtils {
    
        /**
         * 构造方法
         */
        public ExcelUtils() {
        }
    
        /**
         * 判断excel格式是否正确
         *
         * @author Lius
         * @date 2018/10/26 17:37
         */
        private static boolean validateExcel(String filePath) {
            // XLS
            boolean flag = true;
            String fileType = FileUtils.getFileTypeByPath(filePath);
            boolean isExcel = false;
            if (FileType.XLS.equals(fileType) || FileType.XLSX.equals(fileType)) {
                isExcel = true;
            }
            if (null == filePath || !isExcel) {
                flag = false;
                throw new RuntimeException("文件不是excel类型");
            }
            // 判断文件是否存在
            if (!FileUtils.isExistFile(filePath)) {
                flag = false;
                throw new RuntimeException("文件不存在");
            }
            return flag;
        }
    
        /**
         * 根据文件类型读取文件
         *
         * @author Lius
         * @date 2018/10/27 10:56
         */
        public static List<List<String>> readExcel(String filePath) {
            List<List<String>> dataList = new ArrayList<List<String>>();
            InputStream is = null;
            Workbook wb = null;
            try {
                // 验证文件是否合法
                if (!validateExcel(filePath)) {
                    return null;
                }
                File file = new File(filePath);
                is = new FileInputStream(file);
                String fileType = FileUtils.getFileTypeByPath(filePath);
                if (FileType.XLS.equals(fileType)) {
                    is.close();
                    return getSheet(new HSSFWorkbook(is));
                }
                if (FileType.XLSX.equals(fileType)) {
                    is.close();
                    return getSheet(new XSSFWorkbook(is));
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException ex) {
                        is = null;
                        ex.printStackTrace();
                    }
                }
            }
            return dataList;
        }
    
        /**
         * 获得每一个工作表格内容
         *
         * @author Lius
         * @date 2018/10/27 11:14
         */
        private static List<List<String>> getSheet(Workbook workbook) {
            List<List<String>> dataList = new ArrayList<List<String>>();
            // 得到第一个shell
            Sheet sheet = workbook.getSheetAt(0);
            // 得到Excel的行数
            int totalRows = sheet.getPhysicalNumberOfRows();
            // 得到Excel的列数
            int totalCells = 0;
            if (totalRows >= 1 && sheet.getRow(0) != null) {
                totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
            }
            // 循环excel的行
            for (int r = 0; r < totalRows; r++) {
                Row row = sheet.getRow(r);
                if (row == null) {
                    continue;
                }
                List<String> rowLst = new ArrayList<String>();
                // 循环Excel的列
                for (int c = 0; c < totalCells; c++) {
                    Cell cell = row.getCell(c);
                    String cellValue = "";
                    if (null != cell) {
                        // 以下是判断数据的类型
                        CellType type = cell.getCellTypeEnum();
                        switch (type) {
                            // 数字
                            case NUMERIC:
                                // 科学计数法处理
                                NumberFormat nf = NumberFormat.getInstance();
                                nf.setGroupingUsed(false);
                                cellValue = nf.format(cell.getNumericCellValue()) + "";
                                break;
                            // 字符串
                            case STRING:
                                cellValue = cell.getStringCellValue();
                                break;
                            // Boolean
                            case BOOLEAN:
                                cellValue = cell.getBooleanCellValue() + "";
                                break;
                            // 公式
                            case FORMULA:
                                cellValue = cell.getCellFormula() + "";
                                break;
                            // 空值
                            case _NONE:
                                cellValue = "";
                                break;
                            // 故障
                            case ERROR:
                                cellValue = "error";
                                break;
                            default:
                                cellValue = "null";
                                break;
                        }
                    }
                    rowLst.add(cellValue);
                }
                // 保存第r行的第c列
                dataList.add(rowLst);
            }
            return dataList;
        }
    
    
    • 特别说明:

    里面有些变量和方法请参照我的另一篇文章 java常用工具类(三)—— 文件读取的操作类

  • 相关阅读:
    HDU 2112 HDU Today
    HDU 1869 六度分离
    HDU 3790 最短路径问题
    HDU2066 一个人的旅行
    HDU1596 find the safest road(最短路)
    HDU 1254 推箱子(双重bfs)
    HDU 1429 胜利大逃亡(续) (bfs+状态压缩)
    HDU 1045 Fire Net
    数据结构之单链表头插法,尾插法
    Java--会移动、反弹的球
  • 原文地址:https://www.cnblogs.com/LiuSandy/p/10018239.html
Copyright © 2020-2023  润新知