最近我打开了这个主题:
Java - Apache POI - Trouble filling rows and cells with loops (Excel)
我开发了另一种结构,希望这可以解决问题,问题变得更加清晰。
考虑到这种模式:
hashkey1 | hashkey2 | hashkey3 | hashkey4
value1-1 | value2-1 | value3-1 | value4-1
value1-2 | value2-2 | value3-2 | value4-2
value1-3 | value2-3 | value3-3 | value4-3
value1-4 | value2-4 | value3-4 | value4-4
value1-5 | value2-5 | value3-5 | value4-5
这是新代码:
Row keyRow = worksheet.createRow(4);
Row valueRow = null;
int keyCell = -2;
int firstIndex = 0;
int secondIndex = -2;
int row = 5;
ArrayList<String> keyArray = new ArrayList();
ArrayList<String> innerValueArray;
ArrayList<ArrayList<String>> outerValueArray = new ArrayList<ArrayList<String>>();
for (Map.Entry<String, ArrayList<String>> e : matrix.entrySet()) {
keyArray.add(e.getKey());
innerValueArray = new ArrayList();
for (String s : e.getValue()) {
innerValueArray.add(s);
}
outerValueArray.add(innerValueArray);
}
for (String s : keyArray) {
keyCell += 2;
keyRow.createCell(keyCell).setCellValue(keyArray.get(firstIndex++));
}
for (ArrayList<String> aS : outerValueArray) {
secondIndex += 2;
for (String s : aS) {
if ((row - 5) < outerValueArray.size()) {
row++;
}
valueRow = worksheet.createRow(row);
valueRow.createCell(secondIndex).setCellValue(s);
}
}
在另一个主题中,有问题的变量是“keyCell”,在这一个中,它是secondIndex。将值放在正确位置的唯一方法是通过用于键的相同变量,但这使得只能填充一列,删除其他列的内容。问题与其他主题完全相同。所有替代方案都会导致这种情况,我希望SAME行中的值。
问题是:在这种模式中填写和优秀表单是不可能的?因为在内循环中更新变量并保持所需模式当然是不可能的。如何使用循环构建此模式?
OBS:在我的软件中它增加2,没有任何区别。一个人做它会导致同样的问题(细胞被擦除)。
我非常感谢你!
答案 0 :(得分:2)
我不确定我是否真的理解你的问题,但请检查一下。它会创建一个包含您描述的模式的工作表:
import java.io.*;
import java.util.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
public class PoiPattern {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) throws Exception {
Map<String, ArrayList<String>> matrix = new HashMap<String, ArrayList<String>>();
for (int i = 1; i <= 5; i++) {
matrix.put("hashkey"+i, new ArrayList(Arrays.asList(new String[]{"value"+i+"-1", "value"+i+"-2", "value"+i+"-3", "value"+i+"-4", "value"+i+"-5"})));
}
Workbook wb = new HSSFWorkbook();
Sheet worksheet = wb.createSheet();
Row keyRow = worksheet.createRow(0);
int col = 0;
for (String key : matrix.keySet()) {
keyRow.createCell(col).setCellValue(key);
ArrayList<String> values = matrix.get(key);
for (int i = 0; i < values.size(); i++) {
Row r = worksheet.getRow(i+1);
if (r == null) { r = worksheet.createRow(i+1); }
r.createCell(col).setCellValue(values.get(i));
}
col++;
}
FileOutputStream fos = new FileOutputStream(new File("ExampleFill.xls"));
wb.write(fos);
}
}