easyexcel icon indicating copy to clipboard operation
easyexcel copied to clipboard

easyExcel支持追加写吗 ?

Open forgetxue opened this issue 2 years ago • 2 comments

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

forgetxue avatar Jan 03 '23 07:01 forgetxue

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

zhuangjiaju avatar Jan 13 '23 09:01 zhuangjiaju

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

ohMyJason avatar Jan 17 '23 06:01 ohMyJason

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

zhuangjiaju avatar Feb 08 '23 11:02 zhuangjiaju

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

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

zhuchao941 avatar May 04 '23 11:05 zhuchao941

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

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

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

bdqntp avatar May 18 '23 02:05 bdqntp

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

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

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

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

zhuchao941 avatar May 18 '23 04:05 zhuchao941

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

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

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

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

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

bdqntp avatar May 24 '23 09:05 bdqntp

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

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

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

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

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

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

zhuchao941 avatar May 24 '23 10:05 zhuchao941

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

bdqntp avatar May 25 '23 02:05 bdqntp

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,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的

zhuchao941 avatar May 25 '23 08:05 zhuchao941

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的文档吧

bdqntp avatar May 25 '23 08:05 bdqntp

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。。

zhuchao941 avatar May 25 '23 08:05 zhuchao941

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

bdqntp avatar May 25 '23 08:05 bdqntp