栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java用POI解析Excel、读取Excel、导出Excel

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java用POI解析Excel、读取Excel、导出Excel

作者在这里用的是POI-5.0.0的jar包,但是只用这个包直接跑项目是跑不起来的,会报各种类找不到的错。结果最终需要8个jar包才可以正常运行,我把这8个jar包整理了一下,上传到了CSDN资源,点击这里下载
8个jar包截图如下:

除了截图里面的commons-lang3-3.12.0.jar这个包,我用到了这个工具类包里面的StringUtils,其余的8个jar包缺一不可,少一个项目都会报错跑不起来。
现在贴读取excel和导出excel的关键代码:

读取Excel数据的关键代码如下
 public static List Excel01() throws Exception {
        //定义一个list 集合保存从excel解析的用户
        List bean01List = new ArrayList<>();
        //1.读取要解析的excel文件
        InputStream inputStream = new FileInputStream(new File("03.xlsx"));
        XSSFWorkbook wb = new XSSFWorkbook(inputStream);
        //2.获取工作表对象
        XSSFSheet sheet = wb.getSheetAt(0);
        //3.得到行的迭代器
        Iterator iterator = sheet.iterator();
        int rowNum = 0;
        while (iterator.hasNext()) {
            Bean01 bean01 = new Bean01();
            Row row = iterator.next();
            //跳过标题行
            if (rowNum == 0) {
                rowNum++;
                continue;
            }
            for (int i = 0; i < 2; i++) {
                String result = getValue(row.getCell(i));//获取到单元格内的数据,方法见下
                result = StringUtils.deleteWhitespace(result);
//                System.out.println(result);
                if (i == 0) {
                    bean01.setCode(result);
                } else if (i == 1) {
                    bean01.setName(result);
                }
            }
            bean01List.add(bean01);
        }
        return bean01List;

    }
  
    private static String getValue(Cell cell) {
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case NUMERIC:// 数值和日期均是此类型,需进一步判断
                if (DateUtil.isCellDateFormatted(cell)) {
                    //是日期类型
                    return String.valueOf(cell.getDateCellValue());
                } else {
                    //是数值类型
                    return String.valueOf(cell.getNumericCellValue());
                }
            default:
                return null;
        }
    }
将数据导出至Excel表格的关键代码如下
 public static void printExcel(List bean02List) {
        try {
            File file = new File("out.xlsx");

            //2.读取excel模板,创建excel对象
            XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(file));
            XSSFSheet sheet = wb.getSheetAt(0);
            //4.定义一些可复用的对象
            int rowIndex = 0; //行的索引
            int cellIndex = 1; //单元格的索引
            XSSFRow nRow = null;
            Cell nCell = null;
            //5.读取大标题行
            nRow = sheet.createRow(rowIndex++); // 使用后 +1
            //6.读取大标题的单元格
            nCell = nRow.createCell(cellIndex);
            //7.设置大标题的内容
            String bigTitle = "月份新增用户表";
            nCell.setCellValue(bigTitle);
            //8.跳过第二行(模板的小标题,我们要用)
            rowIndex++;
            //9.读取第三行,获取它的样式
            nRow = sheet.createRow(rowIndex);
            //行高
            float lineHeight = 50.f;
            //12.遍历数据
            for (Bean02 bean02 : bean02List) {
                //13.创建数据行
                nRow = sheet.createRow(rowIndex++);
                //16.设置数据行高
                nRow.setHeightInPoints(lineHeight);
                //17.重置cellIndex,从第一列开始写数据
                cellIndex = 1;
                //18.创建数据单元格,设置单元格内容和样式
                //类型
                nCell = nRow.createCell(cellIndex++);
                if (StringUtils.isEmpty(bean02.getType())) {
                    nCell.setCellValue("");
                } else {
                    nCell.setCellValue(bean02.getType());
                }
                //名称
                nCell = nRow.createCell(cellIndex++);
                if (StringUtils.isEmpty(bean02.getName())) {
                    nCell.setCellValue("");
                } else {
                    nCell.setCellValue(bean02.getName());
                }
                //code
                nCell = nRow.createCell(cellIndex++);
                if (StringUtils.isEmpty(bean02.getCode())) {
                    nCell.setCellValue("");
                } else {
                    nCell.setCellValue(bean02.getCode());
                }

            }
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            wb.write(fileOutputStream); //将工作簿写到输出流中
            fileOutputStream.flush();
            fileOutputStream.close();
            wb.close();

        } catch (Exception e) {
            System.out.println(e.toString());
        }

    }

注意,这个地方的out.xlsx文件是提前打开Excel软件保存一个空白的表格文件到这里,也可以弄成通用的模板,这样才能把数据往这个已经存在的excel文件导入进去,大概的关键逻辑代码就这样,根据自己的需求,复制这些代码,改吧改吧,就能用了。
贴一个Java项目的目录结构:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/324742.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号