java读取excel表格数据

22 篇文章 1 订阅
32 篇文章 0 订阅

1 背景介绍

java读取excel文件有很多的应用场景,如读取数据后入库,或者做数据分析,预处理等等,那么如何做到读取文件呢,下面看具体步骤。
笔者使用环境是IDEA2020.1,jdk8.

2 导入依赖

	<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.16</version>
		</dependency>

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.16</version>
		</dependency>

3 实现类

ExceleToDbServiceImpl类:负责获取数据后,使用DAO层接口插入到数据库表中。

public class ExceleToDbServiceImpl {
    public void parseExcelAppDataToDb() {
        // 得到APP表格中所有的数据
        String PATH  = "xxx.xls"
        List<AppDO> listExcel = AppServiceImpl.getAllByExcel(PATH);

        LogUtil.info(LOGGER, listExcel.size());
        int sum = 0;
        for (IfrPlanAppDO ifrPlanAppDO : listExcel) {
            // 插入数据库逻辑 AppDAO实现了具体的插入功能
            // AppDAO.insert(ifrPlanAppDO);
            sum++;
        }
        
    }
}

AppServiceImpl类: 获取数据的具体逻辑实现

public class PlanGetAppServiceImpl {
    //查询表格中所有的数据
  
   // AppDO为对应的POJO类,如Student类有name,age属性,每个属性有get和set方法
    public static List<AppDO> getAllByExcel(String file) {
        Workbook wb = null;
        Sheet sheet = null;
        Row row = null;
        List<AppDO> list = null;
        wb = readExcel(file);
        if (wb != null) {
            //用来存放表中数据
            list = new ArrayList<>();
            //获取第一个sheet
            sheet = wb.getSheetAt(0);
            //获取最大行数
            int rowNum = sheet.getPhysicalNumberOfRows();
            //获取第一行
            row = sheet.getRow(0);
            //获取最大列数
//            int colnum = row.getPhysicalNumberOfCells();
            for (int i = 1; i < rowNum; i++) {
                row = sheet.getRow(i);
                if (row != null) {
                     // 读取表格中数据,第一列
                    Cell cellAppName = row.getCell(0);
                    String appName = cellAppName.getRichStringCellValue().getString();  
                    list.add(ifrPlanAppDO);
                } else {
                    break;
                }
            }
        }
        return list;
    }
}



  //读取excel
    public static Workbook readExcel(String filePath) {
        Workbook wb = null;
        if (filePath == null) {
            return null;
        }
        String extString = filePath.substring(filePath.indexOf('.'));
        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) {
            LOGGER.error(e.toString());
        } catch (IOException e) {
            LOGGER.error(e.toString());
        } catch (NoClassDefFoundError e) {
            LOGGER.error(e.toString());
        }
        return wb;
    }
  • 1
    点赞
  • 12
    收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

amcomputer

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值