使用Apache POI向Excel文件写入来自String的ArrayList的大量数据

我有一个相当大的stringArrayList(约500k以上的项目)。 有没有可能加快写这个数组到Excel文件? 现在需要一段时间,我不知道我是否做了我能做的一切(也许这是.get方法的问题?)。 请参考下面的代码(请不要注意细节 – 这个类仅用于testing目的):

import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Tests { private static final String ADDRESS = "./result/file.xlsx"; public static void readAndWriteAData(int counterOfExecutions, List<String> listOfResults) throws IOException{ File file = new File(ADDRESS); if(file.exists()&&!file.isDirectory()){ file.delete(); } @SuppressWarnings("resource") Workbook wb = new XSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream(ADDRESS); wb.write(fileOut); fileOut.close(); Sheet sheet = wb.createSheet("1"); Row row; Cell cell; int add = 0; System.out.println("Start of filling excel file"); for(int i=0; i<counterOfExecutions;i++){ row = sheet.createRow(i); for(int j=0; j<5; j++){ cell = row.createCell(j); cell.setCellValue(listOfResults.get(j+add)); } add+=5; } FileOutputStream fileOutputSecond = new FileOutputStream(file); wb.write(fileOutputSecond); fileOutputSecond.close(); System.out.println("File "+ADDRESS+" has been created."); } public static void main(String[] args) throws IOException { System.out.println("Start of creating ArrayList"); List<String> lista = new ArrayList<>(); for(int i = 1 ; i<550000;i++){ lista.add("nic "+i); } System.out.println("ArrayList has been filled"); readAndWriteAData(100999, lista); System.out.println("The End"); } } 

提前感谢任何提示! 🙂

请尝试使用SXSSFWorkbook。 这将更有效的更好地使用它尝试看到的Apache POI 3.8 API

看看这个例子

如何阅读,写XLSX文件function于Java的Apache的POI,例如

请参阅下面

如何加速excel的阅读/写作

可能这就解决了同样的问题。 logging器configuration为我做了窍门。