将excel读入java-如何简化

将excel读入java-如何简化,java,excel,spring,spring-mvc,Java,Excel,Spring,Spring Mvc,我写的代码有点复杂,作为一个初学者,我在寻找更简单的解决方案。我有一个6列170行的excel表格。我的想法是逐单元读取并将所有单元存储到一个列表中 List<String> lista = new ArrayList<String>(); sh.forEach(row -> { ro

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

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();    
所以,在主列表中迭代,我有'i%6',通过这个值在每个列表中存储liste[i]

我想的是如何使这个解决方案更简单。这样可能会添加一些getter和setter方法,但对我来说,很难弄清楚我应该用get和set连接什么。这只是我的想法。
如果你有任何其他想法,请与我分享。多谢各位

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

要分解它-

  • 每行表示一个对象,即模型类
  • 每行的列都是该模型类的属性

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

要分解它-

  • 每行表示一个对象,即模型类
  • 每行的列都是该模型类的属性

我不太明白为什么你有6个列表而不是一个列表。因为我是初学者,知识有限。我问这个问题是为了找出如何简化。这是个好主意编辑:列表用于将我的数据排序为列。在第一步中,我从左到右逐单元读取,然后将这些值存储到列表中。由于顺序不同,每个列对应一列。创建一个包含多个
列的
类行
。创建一个包含许多行的
类表
。从Excel表格填充
表格
。将表中的每一行
读入数据库。您正在使用OO语言-编写一些对象!也许可以创建一个
ExcelTableAdapter
,将Excel数据转换为表API。可以创建一个
tabletdatabatchpreparedstatementsetter
来使用
表作为数据。然后你甚至不必把所有的东西都记在记忆里……你会从中学到更多。首先做一些数据建模。如果您发现自己编写了与上述类似的过程代码,请扔掉它,开始做一些数据建模。为什么您要将数据收集到列表中,而不是在第一个流中进行批量更新?我不太理解为什么您有6个列表而不是列表。因为我是初学者,知识有限。我问这个问题是为了找出如何简化。这是个好主意编辑:列表用于将我的数据排序为列。在第一步中,我从左到右逐单元读取,然后将这些值存储到列表中。由于顺序不同,每个列对应一列。创建一个包含多个
列的
类行
。创建一个包含许多行的
类表
。从Excel表格填充
表格
。将表中的每一行
读入数据库。您正在使用OO语言-编写一些对象!也许可以创建一个
ExcelTableAdapter
,将Excel数据转换为表API。可以创建一个
tabletdatabatchpreparedstatementsetter
来使用
表作为数据。然后你甚至不必把所有的东西都记在记忆里……你会从中学到更多。首先做一些数据建模。如果您发现自己编写了类似于上述的过程代码,请扔掉它,开始做一些数据建模。为什么您要将数据收集到列表中,而不是在第一个流中进行批量更新?什么是“Cmd”对象?这个答案似乎忽略了表格的二维性质。“包含与每列对应的属性的Java Cmd类”&“创建表示该行的对象并将其添加到Cmd对象列表”-此“Cmd”如何对象同时表示行和列?cmd对象指的是表示excel中每一行的模型对象。模型类的属性表示列,模型的每个实例表示一行。为什么“表示excel中每一行的对象”称为“cmd”。在这种情况下,为什么“Java Cmd类contai[n]属性对应于每一列”呢?您可以随意调用它,这就是数据建模的方式,其中每个Java属性对应于一列。我的答案真的那么难理解吗?什么是“Cmd”对象?这个答案似乎忽略了表格的二维性质。“包含与每列对应的属性的Java Cmd类”&“创建表示该行的对象并将其添加到Cmd对象列表”-此“Cmd”如何对象同时表示行和列?cmd对象指的是表示excel中每一行的模型对象。模型类的属性表示列,模型的每个实例表示一行。为什么“表示excel中每一行的对象”称为“cmd”。在这种情况下,为什么“Java Cmd类contai[n]属性对应于每一列”呢?您可以随意调用它,这就是数据建模的方式,其中每个Java属性对应于一列。我的答案真的那么难理解吗?
 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));    
            }
 liste[i % 6].add(lista.get(i));