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);
...
我目前正在尝试通过我的 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);
...