找回密码
 立即注册

QQ登录

只需一步,快速开始

cmbsjdev
金牌服务用户   /  发表于:2021-8-11 18:46  /   查看:5978  /  回复:16
本帖最后由 Clark.Pan 于 2021-8-23 12:22 编辑

使用的gcexcel4.0,toJson方法在此文件下无法正常执行,环境剩余内存不到900m。

评分

参与人数 1金币 +500 收起 理由
Clark.Pan + 500 感谢提出产品问题

查看全部评分

16 个回复

倒序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-8-12 12:01:51
推荐
本帖最后由 Clark.Pan 于 2021-8-23 12:22 编辑
cmbsjdev 发表于 2021-8-12 11:18
单步到 workbook.toJson()  时候   java.lang.OutOfMemoryError: Java heap space;  30万条数据23列,文件 ...

问题已收到,我这边已将相关代码表单整理提交给我们研发同事调研一下,看下是否有更好的解决方案,帖子先为您改为保留处理,有进展会在本帖更新(DOCXLS-4697)
---------------------------------------
本帖最终总结如下:
900M的内存对于这个文件确实不够用,您可以将json写到文件流里面,不要返回string,类似下图这样:
workbook.toJson(new FileOutputStream("D:\\java.json"));
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-8-12 12:09:06
推荐
经确认,900M的内存对于这个文件确实不够用,您可以将json写到文件流里面,不要返回string
workbook.toJson(new FileOutputStream("D:\\java.json"));
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-11 18:54:43
沙发
您好,这个需要您提供对应的“此文件”。我们针对“此文件”调查一下,具体文件里的哪些内容导致了无法正常执行。
按照以往经验,出现这样的问题一般来说都是文件中包含了某些异常的设置,或者文件中的某些内容过多过大导致,这些都需要提供具体的文件来调查才能确定。
回复 使用道具 举报
cmbsjdev
金牌服务用户   /  发表于:2021-8-11 18:58:15
板凳
请查收附件,你们这系统还不支持20m,你使用我给的附件自己造下数据吧,谢谢
回复 使用道具 举报
cmbsjdev
金牌服务用户   /  发表于:2021-8-11 18:58:52
地板
cmbsjdev 发表于 2021-8-11 18:58
请查收附件,你们这系统还不支持20m,你使用我给的附件自己造下数据吧,谢谢

数据文件

10W行.xlsx

10.45 MB, 下载次数: 441

回复 使用道具 举报
cmbsjdev
金牌服务用户   /  发表于:2021-8-11 19:55:04
5#
烦请提供个后端excel文件到前端spread插件的完成demo,我们对比看下是不是还有其他性能更好的方法?
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-8-11 20:14:42
6#
cmbsjdev 发表于 2021-8-11 19:55
烦请提供个后端excel文件到前端spread插件的完成demo,我们对比看下是不是还有其他性能更好的方法?

已上传至网盘,请下载
链接: https://pan.baidu.com/s/1ty6epX6l-Wx_2o3KkdLUTg  密码: p4rp
回复 使用道具 举报
cmbsjdev
金牌服务用户   /  发表于:2021-8-12 11:15:10
7#
  BackFlowInfo backFlowInfo = monitorMapper.getBackFlowInfo(modelNo, dataDate);

        String excelUrl = backFlowInfo.getMergeDataPath();

        com.grapecity.documents.excel.Workbook workbook=new com.grapecity.documents.excel.Workbook();

        String dirFileName = CommUtils.getUuidKey() + ".xlsx";

        String fileTempPath = filePath + Constant.SEPARATOR+ dirFileName;

        File targetFile = new File(filePath, FilenameUtils.getName(dirFileName));

        try (InputStream inputStream = FileUpAndDownloadUtil.downLoadFile(excelUrl)) {

            FileUtils.copyInputStreamToFile(inputStream, targetFile);

            if (inputStream != null) {

                inputStream.close();

            }

            workbook.open(fileTempPath);

        } catch (Exception e) {

            log.error("***100001queryGatherData失败***"+e.getMessage(),e);

        } finally {

            if (targetFile.exists() && targetFile.isFile()){
                boolean flag = targetFile.delete();
                if (flag){
                    log.info("****100002文件已经删除***"+targetFile);
                }
            }

        }
        return workbook.toJson();
回复 使用道具 举报
cmbsjdev
金牌服务用户   /  发表于:2021-8-12 11:18:54
8#
单步到 workbook.toJson()  时候   java.lang.OutOfMemoryError: Java heap space;  30万条数据23列,文件30m  环境:900m内存  内存占用率88%
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部