在同一工作簿中逐列打印数据 – java poi

我正在使用Java和POI打印一些数据,以Excel文件。 我想我只是缺less一个小逻辑来解决这个问题。 我有以下格式存储在数组列表中的数据:

a = [1,2,3] // arraylist b = [4,5,6] // arraylist c = [7,8,9] // arraylist 

我想按照以下给出的格式打印这个数据列为excel文件:

 1 | 4 | 7 2 | 5 | 8 3 | 6 | 9 

我使用的代码如下所示:

 public final_out = new FileOutputStream(new File(final_output_path)); public XSSFWorkbook workbook = new XSSFWorkbook(); public XSSFSheet sheet = workbook.createSheet("data_vertical_final"); public Row row; for (int i=0; i < a.size(); i++) { String value = a.get(i); row = sheet.createRow(i); Cell cell = row.createCell(13); cell.setCellValue(value); } for (int i=0; i < b.size(); i++) { String value = b.get(i); row = sheet.createRow(i); Cell cell = row.createCell(15); cell.setCellValue(value); } for (int i=0; i < c.size(); i++) { String value = a.get(i); row = sheet.createRow(i); Cell cell = row.createCell(17); cell.setCellValue(value); } workbook.write(final_out); workbook.close(); final_out.close(); 

错误我得到:

没有错误,但是一切都在新的excel文件中被覆盖,并且最终的输出看起来被破坏了。 我是否需要为每个循环制作新的工作簿? 或者有我缺less的东西。

PS:

下面显示的数据只是一个例子。 我使用的一些原始文件在1000到2000之间,或者更多。

我想要dynamic创build行并从数组列表中提取值并将其存储在我创build的行中。

只创builda.size()行,而不是a.size() squared行。
不要在代码中覆盖它们。

我假设a.size() == b.size()b.size() == c.size()

 public List<Row> rows = new ArrayList<Row>(a.size()); for (int i=0; i < a.size(); i++) { rows.add(sheet.createRow(i)); } for (int i=0; i < a.size(); i++) { String value = a.get(i); Cell cell = rows.get(i).createCell(13); cell.setCellValue(value); } for (int i=0; i < b.size(); i++) { String value = b.get(i); Cell cell = rows.get(i).createCell(15); cell.setCellValue(value); } for (int i=0; i < c.size(); i++) { String value = a.get(i); Cell cell = rows.get(i).createCell(17); cell.setCellValue(value); } 

如果你已经解决了这个问题:将abc放到一个集合中,并且只用一个循环遍历它们(代替3个独立的循环)将会更加清晰。

我认为a是最长的名单。 看一下这个:

 public List<Row> rows = new ArrayList<>(a.size()); for (int i=0; i < a.size(); i++) { rows.add(sheet.createRow(i)); } List<List<String>> alphabet = new ArrayList<>(); alphabet.add(a); alphabet.add(b); alphabet.add(c); for(int i=0; i < alphabet.size(); i++) { for (int j=0; j < alphabet.get(i).size(); j++) { String value = alphabet.get(i).get(j); Cell cell = rows.get(j).createCell(13 + i*2); //<- 13, 15, 17... cell.setCellValue(value); } }