Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ApachePOI将ArrayList中的大量数据写入Excel文件_Java_Excel_Arraylist_Apache Poi - Fatal编程技术网

Java 使用ApachePOI将ArrayList中的大量数据写入Excel文件

Java 使用ApachePOI将ArrayList中的大量数据写入Excel文件,java,excel,arraylist,apache-poi,Java,Excel,Arraylist,Apache Poi,我有一个非常巨大的字符串数组列表(大约超过500k和更多项)。 是否有可能加快将此数组写入excel文件的速度?现在这需要一段时间,我不知道我是否做了我能做的一切(可能是.get方法的问题?)。 请参考以下代码(请不要附加详细信息-创建此类仅用于测试目的): 导入java.io.File; 导入java.io.FileOutputStream; 导入java.io.IOException; 导入java.util.ArrayList; 导入java.util.List; 导入org.apache

我有一个非常巨大的字符串数组列表(大约超过500k和更多项)。 是否有可能加快将此数组写入excel文件的速度?现在这需要一段时间,我不知道我是否做了我能做的一切(可能是.get方法的问题?)。 请参考以下代码(请不要附加详细信息-创建此类仅用于测试目的):

导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
公开课考试{
私有静态最终字符串地址=“./result/file.xlsx”;
公共静态void readandwritedata(执行的int计数器,结果列表)引发IOException{
文件=新文件(地址);
if(file.exists()&&!file.isDirectory()){
delete();
}
@抑制警告(“资源”)
工作簿wb=新XSSFWorkbook();
FileOutputStream fileOut=新的FileOutputStream(地址);
wb.写入(文件输出);
fileOut.close();
Sheet Sheet=wb.createSheet(“1”);
行行;
细胞;
int add=0;
System.out.println(“开始填写excel文件”);

对于(int i=0;i请尝试使用SXSSFWorkbook。为了更好地使用它,哪个更有效?请尝试查看Apache POI 3.8 API

请尝试使用SXSSFWorkbook。为了更好地使用它,哪个更有效?请查看示例


看看这个例子

请参阅下文

这可能解决了同样的问题;记录器配置为我解决了这个问题。

请参阅下面的内容


可能这解决了同样的问题;记录器配置为我解决了问题。

非常感谢!就是这样。我将操作时间减少了27倍多。非常感谢!就是这样。我将操作时间减少了27倍多。
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");

}

}