将Excel读入Java-如何简化

时间:2018-12-24 11:25:35

标签: java excel spring spring-mvc

我写了一些代码,我觉得有些复杂,作为初学者,它正在寻找更简单的解决方案。我有6列170行的Excel表。我的想法是逐单元读取并将所有单元存储到一个列表中。

Category.find({})

此后,遍历此列表并将单元格按编号1到6存储到6个列表中。我是怎么做到的:

List<String> lista = new ArrayList<String>();                       
        sh.forEach(row -> {                                             
                row.forEach(cell -> {                                       
                String cellvalue = dataFormatter.formatCellValue(cell);     
                lista.add(cellvalue);
                System.out.println(cellvalue);
            }); });
        workbook.close();    

我用过

 ArrayList<String> lista1 = new ArrayList<String>();
        ArrayList<String> lista2 = new ArrayList<String>();
        ArrayList<String> lista3 = new ArrayList<String>();
        ArrayList<String> lista4 = new ArrayList<String>();
        ArrayList<String> lista5 = new ArrayList<String>();
        ArrayList<String> lista6 = new ArrayList<String>();

        @SuppressWarnings("unchecked")
        ArrayList<String>[] liste = new ArrayList[]{lista1, lista2, lista3, lista4, lista5, lista6};

        for (int i = 6 ; i < lista.size(); i ++ ){                                                                  // i = 6  --->  preskoči prvi red
              liste[i % 6].add(lista.get(i)); }     //liste[i % 6] = liste[1] = liste[2] = liste[3] = liste[4], etc
        jdbcTemplate.batchUpdate("INSERT INTO INS_RAZNO.ZAPOSLENICI_TEST VALUES (?, ?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {
            @Override                                   
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                ps.setString(1, lista1.get(i));
                ps.setString(2, lista2.get(i));         
                ps.setString(3, lista3.get(i));     
                ps.setString(4, lista4.get(i));         //ćelije koje sadržavaju brojeve mogu se prenositi kao stringovi u NUMBER polje
                ps.setString(5, lista5.get(i));         //ćelije koje sadržavaju slova ne mogu se prenositi u NUMBER polje
                ps.setString(6, lista6.get(i));    
            }

因此,遍历主列表,我有'i%6'并以此值在每个列表中存储liste [i]。

我正在考虑的是如何使此解决方案更简单。并可能添加一些getter和setter方法,但对我而言,很难确定应该与get和set连接什么。这只是我的想法。 如果您有其他想法,请与我分享。谢谢。

1 个答案:

答案 0 :(得分:2)

代替使用List中的String,而创建一个Java模型类,其中包含与各列相对应的属性。然后遍历excel的每一行,创建一个代表该行的实例,并将其添加到模型对象的List中。

将其分解-

  • 每一行代表一个对象,即您的模型类。
  • 每一行的列是该模型类的属性。