[alibaba/easyexcel]easyExcel支持追加写吗 ?

2024-05-09 704 views
4

easyExcel 在每次调用finish方法之后把workBook对象中存的数据写入到outputStream中,生成一个文件,是否支持finish之后往这个文件里追加的写数据。

回答

2

这个我需要排查下,模板太大是否会有问题。建议临时方案就是放到其他地方一次性写入。

0

这样在数据量大的时候,一次性写入是否会有内存溢出的风险

3

这个测试了 无解,底层依赖于poi,大文件追加会OOM。 建议临时存储到数据库或者本地文件缓存 ,再追加。

1

这个测试了 无解,底层依赖于poi,大文件追加会OOM。 建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

4

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用java.io中的包先追加写入。

3

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用java.io中的包先追加写入。

那最终写入到excel的时候不还得读到内存里?

5

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。

那最终写入到excel的时候不还得读到内存里?

最后就一次读取一行数据,不用全部读取到内存中

6

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。

那最终写入到excel的时候不还得读到内存里?

最后就一次读取一行数据,不用全部读取到内存中

读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?

9

zhuchao941

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。

那最终写入到excel的时候不还得读到内存里?

最后就一次读取一行数据,不用全部读取到内存中

读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?

模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();

    FileReader fr = null;
    BufferedReader br = null;
    try {
        fr = new FileReader("缓存的文件");
        br = new BufferedReader(fr);
        String line = null;
        while ((line = br.readLine()) != null) {
            excelWriter.fill(line, sheet);
        }
    } catch (FileNotFoundException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
3

zhuchao941

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。

那最终写入到excel的时候不还得读到内存里?

最后就一次读取一行数据,不用全部读取到内存中

读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?

模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();

    FileReader fr = null;
    BufferedReader br = null;
    try {
        fr = new FileReader("缓存的文件");
        br = new BufferedReader(fr);
        String line = null;
        while ((line = br.readLine()) != null) {
            excelWriter.fill(line, sheet);
        }
    } catch (FileNotFoundException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

那你最终在excelWriter.finish之前 数据不还是全部都在内存里么?只是你读取的时候用了bufferReader,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的

8

zhuchao941

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。

那最终写入到excel的时候不还得读到内存里?

最后就一次读取一行数据,不用全部读取到内存中

读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?

模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();

    FileReader fr = null;
    BufferedReader br = null;
    try {
        fr = new FileReader("缓存的文件");
        br = new BufferedReader(fr);
        String line = null;
        while ((line = br.readLine()) != null) {
            excelWriter.fill(line, sheet);
        }
    } catch (FileNotFoundException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

那你最终在excelWriter.finish之前 数据不还是全部都在内存里么?只是你读取的时候用了bufferReader,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的

不会全部都在内存中,先去看看easyexcel的文档吧

6

zhuchao941

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。

那最终写入到excel的时候不还得读到内存里?

最后就一次读取一行数据,不用全部读取到内存中

读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?

模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();

    FileReader fr = null;
    BufferedReader br = null;
    try {
        fr = new FileReader("缓存的文件");
        br = new BufferedReader(fr);
        String line = null;
        while ((line = br.readLine()) != null) {
            excelWriter.fill(line, sheet);
        }
    } catch (FileNotFoundException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

那你最终在excelWriter.finish之前 数据不还是全部都在内存里么?只是你读取的时候用了bufferReader,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的

不会全部都在内存中,先去看看easyexcel的文档吧

大哥 没看过文档会来这提问么 你要回答就答重点 如果有相关文档就帮忙贴一下。前面说了个半天就答了个BufferedReader。。

8

zhuchao941

这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。

没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊

意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。

那最终写入到excel的时候不还得读到内存里?

最后就一次读取一行数据,不用全部读取到内存中

读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?

模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();

    FileReader fr = null;
    BufferedReader br = null;
    try {
        fr = new FileReader("缓存的文件");
        br = new BufferedReader(fr);
        String line = null;
        while ((line = br.readLine()) != null) {
            excelWriter.fill(line, sheet);
        }
    } catch (FileNotFoundException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

那你最终在excelWriter.finish之前 数据不还是全部都在内存里么?只是你读取的时候用了bufferReader,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的

不会全部都在内存中,先去看看easyexcel的文档吧

大哥 没看过文档会来这提问么 你要回答就答重点 如果有相关文档就帮忙贴一下。前面说了个半天就答了个BufferedReader。。

6