• java读取excel文件


        //分析文件,结果为[[第一行的数据],[第二行的数据],.....]
        public static List<List<String>> analysisSheet(String filePath, int currentSheet) {
            Workbook wb = null;
            Sheet sheet = null;
            Row row = null;
            List<List<String>> list = null;
            String cellData = null;
            wb = readExcel(filePath);
            if (wb != null) {
                //用来存放表中数据
                list = new ArrayList<List<String>>();
                //获取第一个sheet
                sheet = wb.getSheetAt(currentSheet);
                //获取最大行数
                int rownum = sheet.getPhysicalNumberOfRows();
                //获取第一行
                row = sheet.getRow(0);
                //获取最大列数
                int colnum = 0;
                /* 获取最大列数 */
                for(int i = 1; i < rownum; i++){
                    row = sheet.getRow(i);
                    if(row.getPhysicalNumberOfCells()>colnum){
                        colnum = row.getPhysicalNumberOfCells();
                    }
                }
                for (int i = 1; i < rownum; i++) {
                    Map<String, String> map = new LinkedHashMap<String, String>();
                    row = sheet.getRow(i);
                    if (row != null) {
                        List<String> rowData = new ArrayList<>();
                        for (int j = 0; j < colnum; j++) {
                            cellData = (String) getCellFormatValue(row.getCell(j));
                            rowData.add(cellData);
                        }
                        list.add(rowData);
                    } else {
                        break;
                    }
                }
            }
            return list;
        }
    
        //读取excel文件
        public static Workbook readExcel(String filePath) {
            Workbook wb = null;
            if (filePath == null) {
                return null;
            }
            String extString = filePath.substring(filePath.lastIndexOf("."));
            InputStream is = null;
            try {
                is = new FileInputStream(filePath);
                if (".xls".equals(extString)) {
                    return wb = new HSSFWorkbook(is);
                } else if (".xlsx".equals(extString)) {
                    return wb = new XSSFWorkbook(is);
                } else {
                    return wb = null;
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return wb;
        }
        //根据excel文件内容数据的不同类型格式化
        public static Object getCellFormatValue(Cell cell) {
            Object cellValue = null;
            if (cell != null) {
                //判断cell类型
                switch (cell.getCellType()) {
                    case Cell.CELL_TYPE_NUMERIC: {
                        cellValue = String.valueOf(cell.getNumericCellValue());
                        break;
                    }
                    case Cell.CELL_TYPE_FORMULA: {
                        //判断cell是否为日期格式
                        if (DateUtil.isCellDateFormatted(cell)) {
                            //转换为日期格式YYYY-mm-dd
                            cellValue = cell.getDateCellValue();
                        } else {
                            //数字
                            cellValue = String.valueOf(cell.getNumericCellValue());
                        }
                        break;
                    }
                    case Cell.CELL_TYPE_STRING: {
                        cellValue = cell.getRichStringCellValue().getString();
                        break;
                    }
                    default:
                        cellValue = "";
                }
            } else {
                cellValue = "";
            }
            return cellValue;
        }
        //写入文件,toExcelMap内容格式为{"第五列":"xxxx","第六列:"xxxx"....}
        public static void writeExcel(ConcurrentHashMap<Integer, LinkedHashMap<String,Object>> toExcelMap, int currentSheet, String filePath) {
            OutputStream out = null;
            try {
                // 读取Excel文档
                Workbook workBook = readExcel(filePath);
                // sheet 对应一个工作页
                Sheet sheet = workBook.getSheetAt(currentSheet);
    
                /**
                 * 往Excel中写新数据
                 */
                for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                    try {
                        log.info("写入第{}条", i);
                        Row row = sheet.getRow(i);
                        if (toExcelMap.containsKey(i)) {
                            LinkedHashMap<String, Object> info = toExcelMap.get(i);
                            row.createCell(START_COLUMN).setCellValue(info.get("location") != null ? info.get("location").toString() : null);
                            row.createCell(START_COLUMN + 1).setCellValue(info.get("status") != null ? info.get("status").toString() : null);
                            row.createCell(START_COLUMN + 2).setCellValue(info.get("count") != null ? info.get("count").toString() : null);
                        }
                    }catch (Exception e) {
                        errorWriteList.add(e);
                    }
                }
                System.out.println(errorWriteList);
    
                // 创建文件输出流,准备输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效
                out = new FileOutputStream(filePath);
                workBook.write(out);
                System.out.println("------- 数据导出成功(filePath"+filePath+") -------");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("------- 数据导出失败 -------");
            } finally {
                try {
                    if (out != null) {
                        out.flush();
                        out.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
  • 相关阅读:
    Oracle Core 学习笔记一 Redo 和 Undo 机制详解
    Oracle Linux 6.1 平台安装 Database 11gR2 步骤 说明
    Oracle 查看表空间使用率 SQL 脚本
    Oracle 单实例 Relink Binary Options 说明
    Oracle Linux 6 下 Oracle RDBMS Server 11gR2 Preinstall RPM 包说明
    Oracle DBLink 访问Lob 字段 ORA22992 解决方法
    Oracle 10g 对象 默认 ITL 数量 测试
    Oracle Core 学习笔记一 Redo 和 Undo 机制详解
    与系统 性能相关的 常见十个瓶颈 说明
    Oracle 11g UNDO 管理 详解
  • 原文地址:https://www.cnblogs.com/fengzi7314/p/15684521.html
Copyright © 2020-2023  润新知