我有一个字符串arraylist名称,像这样的代码:
[a,b,c,d]
和另一个字符串数组列表,其中包含诸如DWS这样的名称的数据:
[a11,a22,a33,a44,a55,a66,a77,b11,b22,b33,b44,b55,b66,b77,c11,c22,c33,c44,c55,c66,c77,d11,d22,d33,d44,d55,d66,d77]
我想做的是要像这样将DWS arraylist写入excel文件:
我已经尝试过这种方式:
FileInputStream file1 = new FileInputStream(new File(namefile));
XSSFWorkbook wb1 = new XSSFWorkbook(file1);
XSSFSheet sheet1 = wb1.getSheetAt(0);
int limit = 7;
for (int m = 0; m < code.size(); m++) {
for (int x = 0; x < DWS.size(); x++) {
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
Cell cell = row2.createCell(m * 3 + 4);
cell.setCellValue(DWS.get(x));
}
}
}
有什么办法解决这个问题吗?
更新
我按照建议这样更改代码:
int limit = 7;
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
for (int m = 0; m < code.size(); m++) {
Cell cell = row2.createCell(m * 3 + 4);
cell.setCellValue(DWS.get(i));
}
}
结果是这样的:
它仅循环前7个数据。我需要它来继续其余的arraylist。像第一张图片一样。
更新
让我再次解释我的代码流程
1)它将DWS arraylist循环到第一个单元格为5号的单元格中,并循环到最后一行,即第7号行,
2)然后,到达第7行之后,它应该创建一个新的单元格,该单元格位于Cell cell = row2.createCell(m * 3 + 4);
行中,然后再次从DWS arraylist数据继续循环。
3)此步骤将继续进行,直到到达DWS的最后一个arraylist数据为止
有可能这样做吗?
UPDATE 2.0
我改为:
int cellValueIndex = 0;
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
for (int m = 0; m < code.size(); m++) {
Cell cell = row2.createCell(m * 3 + 4);
cell.setCellValue(DWS.get(cellValueIndex));
cellValueIndex++;
}
}
但是我遇到了这样的错误:
java.lang.IndexOutOfBoundsException
UPDATE 3.0
我改成这个,但结果仍然是错误的
int cellValueIndex = 0;
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
for (int m = 0; m < code.size(); m++) {
Cell cell = row2.createCell(m * 3 + 4);
cell.setCellValue(DWS.get(cellValueIndex));
}
cellValueIndex = cellValueIndex + 1;
}
UPDATE 4.0
我对此进行了更改:
int cellValueIndex = 0;
int counter = 0;
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
Cell cell = row2.createCell(4);
cell.setCellValue(DWS.get(cellValueIndex));
cellValueIndex++;
int x = row2.getRowNum();
if (x == limit) {
for (int m = 1; m < code.size(); m++) {
Cell cell1 = row2.createCell(m * 3 + 4);
cell1.setCellValue(DWS.get(cellValueIndex + 1));
cellValueIndex++;
}
}
}
结果是这样的:
但是当我尝试设置i = 0;时,就像这样:
int cellValueIndex = 0;
for (int i = 0; i < total1; i++) {
Row row2 = sheet1.getRow(i + 2);
Cell cell = row2.createCell(4);
cell.setCellValue(DWS.get(cellValueIndex));
cellValueIndex++;
int x = row2.getRowNum();
if (x == total1) {
i = 0;
for (int m = 1; m < shiftcode.size(); m++) {
Cell cell1 = row2.createCell(m * 3 + 4);
cell1.setCellValue(DWS.get(cellValueIndex));
cellValueIndex++;
i++;
}
}
}
我遇到这样的错误:
java.lang.IndexOutOfBoundsException
答案 0 :(得分:0)
这里有3个for循环!但是,正如我所看到的,您正在第三个循环中创建单元格,其中x的值是DWS中的最后一个表示性值。如果DWS只是像元值的来源,那么您应该为此使用一个单独的索引,而不要为此保留循环。
在这种情况下,尽管您没有从最终结果中意识到,但它正在创建DWS.size乘以表及其单元!您不会从结果中意识到这一点,因为您看到的是最后执行的表,该表仅包含值d77。而且您只对所有单元格都放了一个值,因为在最后一个循环中,DWS.get(x)始终是常数,因此您不必这样做。
您必须为每个单元格设置不同的值。
解决方案: 您只需要2个循环。
int cellValueIndex = 0;
for (int m = 0; m < limit; m++) {
// create a row here
for (int n = 0; n < code.length; n++) {
// take the value from DWS like DWS.get(cellValueIndex) and
// keep increamenting cellValueIndex by one always
}
}