Excel 创建仅填充最后的列和行 Android Studio

Excel created only fills last columns and rows Android Studio

我目前正在尝试通过我的 android 应用程序创建一个 excel。 我有一个从服务器获取的响应数组。 但是当数据被插入 excel 时,由于某些奇怪的原因,只有最后一列被填充。我尝试了一些从 for 迭代切换到 for-each 以遍历数组的解决方案,因为 for 循环没有按我预期的方式工作。

我记录了接收到的数据,这些数据应该被插入到单元格的位置和行中,记录的数据是正确的,但输出是错误的。

下面的代码用于将值设置到单元格中并记录位置和行。还附上输出图像: [![这是我面临的问题的图片][1]][1]

 private void setData() {
        try {

            int i = 0;
            for (int pos : postions) {
                List<Orderpojo> atttt = Arrays.asList(dataList.get(i).getEmployee());
                int pos1 = pos + 1;
                int pos2 = pos + 2;
                int intimecounter = row_index;
                Log.e(Admin_Att_Report.class.getSimpleName(), "setData: Position" + pos);

                for (Orderpojo Record : atttt) {
                    Row newrow = sheet.createRow(intimecounter);
                    cell = newrow.createCell(pos);
                    cell.setCellValue(Record.getIn_Time());
                    Log.e(Admin_Att_Report.class.getSimpleName(), "setData: Data Inserted at Row " + intimecounter + "\n" +
                            "VALUE User Name " + dataList.get(i).getMgmt_Name()
                            + "\n" +
                            "VALUE " + pos + " : InTime " + Record.getIn_Time()
                            + "\n" +
                            "VALUE " + pos1 + " : OutTime " + Record.getOut_Time()
                            + "\n" +
                            "VALUE " + pos2 + " : Work DOne " + Record.getWork_Done() +
                            "\n");

                    cell = newrow.createCell(pos1);
                    cell.setCellValue(Record.getOut_Time());

                    cell = newrow.createCell(pos2);
                    cell.setCellValue(Record.getWork_Done());

                    Log.e(Admin_Att_Report.class.getSimpleName(), "setData: Data Inserted at Row " + intimecounter + " at Columns :" + pos + " & " + pos1 + " & " + pos2);


                    intimecounter = intimecounter + 1;


                }
                i++;
            }


        } catch (Exception exception) {
            exception.printStackTrace();
        }

    }

数据应该填写在三个位置:'In-Time'、'Out-Time' & 'Work Done'。 因此使用增量变量,例如 pos1 和 pos2。 起始位置为 3,每个新用户增加 3。即 3,9,12,.... 因此填充数据的位置。

记录的数据如下所示,经过十几次验证都是正确的。

Admin_Att_Report: setData: Data Inserted at Row 6
    VALUE User Name Rohit Borkar
    VALUE 39 : InTime 2022-02-05 09:43:31
    VALUE 40 : OutTime 2022-02-05 18:06:39
    VALUE 41 : Work DOne working on amanora park school drawings with vinay.

我希望记录的数据是可以理解的。 [1]: https://i.stack.imgur.com/hrgEa.png

使用 apache poi Row.createRow 总是创建一个新的空行。如果该行已存在于 sheet 中,则该行中的所有单元格都将被删除。

因此,如果您想获取和更新已经存在的行,您必须首先尝试使用 Sheet.getRow 获取这些行。仅当 Sheet.getRow returns null 因为该行尚不存在,请创建它。

在你的例子中:

...
Row newrow = sheet.getRow(intimecounter);
if (newrow == null) newrow = sheet.createRow(intimecounter);
...