Java – Apache POI – 在这种模式下填充循环和单元格是不可能的? (EXCEL)

最近我打开了这个话题:

Java – Apache POI – 用循环填充行和单元格错误(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); } } 

在另一个话题中,有问题的variables是“keyCell”,在这个variables中,它是secondIndex。 把值放在正确的地方的唯一方法是通过用于键的相同variables,但是这使得只有一列被填充,擦除其他的内容。 问题与其他主题完全相同。 所有的替代品都会导致这种情况,我想要在同一行中的值。

问题是:在这种模式下填充和优化表单是不可能的? 因为在内部循环中更新variables并保持所需的模式当然是不可能的。 我怎样才能build立循环的模式?

OBS:在我的软件中增加了2,没有什么区别。 这样做会导致同样的问题(单元格被擦除)。

我非常感谢你!

我不确定我是否真的了解你的问题,但请检查一下。 它会用你描述的模式创build一个工作表:

 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); } }