积木报表导出数据量太大报错

MyEMS能源管理系统技术选型:Python后端+React前端实践 企业能源管理系统需要解决多协议仪表接入、多租户数据隔离和复杂报表展示等核心问题,技术选型直接决定系统能否长期稳定运行。物联网通信场景中,Python凭借丰富的工业协议生态(如Modbus、DL/T 645)和成熟的数据分析库(pandas、scikit-learn),大幅降低采集与能耗预测的开发成本;前端则依赖React的虚拟DOM与组件化能力,支撑实时监控大屏、高频数据刷新和大量可复用页面。前后端通过REST API与WebSocket协作,构建出既敏捷又可靠的企业级能管平台。文章从业务约束出发,拆解Py 阅读详情

积木报表导出数据量太大报错问题处理

  1. 问题背景
  2. 解决方案
  3. 运行结果
  4. 关键代码

问题背景

积木报表在导出大量数据时可能会遇到报错‌,‌这通常是由于数据量大导致的性能问题或数据处理方式不当引起的。‌以下是一些可能导致报错的原因及相应的解决方法:‌

‌性能问题‌:‌当数据量非常大时,‌积木报表在导出过程中可能会遇到性能瓶颈,‌导致导出过程缓慢甚至失败。‌这可能是因为报表工具本身或其所依赖的库(‌如Apache POI)‌在处理大量数据时的性能不足。‌解决这一问题的方法包括优化SQL查询、‌调整分页大小、‌使用更适合处理大量数据的库(‌如阿里巴巴的EasyExcel)‌进行导出,‌或者采用异步处理的方式来避免接口超时1。‌
‌数据处理方式‌:‌如果待导出的数据包含特殊字符,‌如英文双引号或等号,‌这可能导致JSON反序列化报错。‌这种情况下,‌需要检查业务数据,‌确保数据格式正确,‌避免包含可能导致报错的特殊字符23。‌
‌内存溢出‌:‌如果报表工具或其依赖的库不支持流式(‌分批)‌导出,‌大量数据的处理可能会导致内存溢出。‌解决这一问题的方法包括使用流式导出的方式,‌或者检查报表工具是否支持异步分页呈现和流式(‌分批)‌导出Excel的功能4。‌
综上所述,‌解决积木报表在导出大量数据时报错的问题,‌需要从优化数据处理方式、‌调整导出设置、‌以及确保数据格式正确等方面入手。‌通过这些方法,‌可以有效提高报表导出的稳定性和性能。‌

解决方案

1、在项目中写个拦截器,拦截积木报表导出接口
2、获取到积木报表查询的数据,自己实现导出功能,这里我使用的是阿里的easyExcel导出

运行结果

在这里插入图片描述
在这里插入图片描述

关键代码

1、添加拦截器

拦截积木报表导出接口/jmreport/exportAllExcelStream
@Component
@Slf4j
public class ExportExcelInterceptor implements HandlerInterceptor {
   
   

    @Autowired
    private ExportUtil exportUtil;


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   
   
        String requestURI = request.getRequestURI();
        if (requestURI.endsWith("/jmreport/exportAllExcelStream")) {
   
   
            // 在这里执行拦截逻辑,例如验证用户权限、记录日志等
            log.info("Intercepted request: {}" , requestURI);
            exportUtil.exportExcel(request, response, handler);
            return false;
            // 返回true表示继续处理请求,返回false表示中断请求处理
        }
        return true;
        // 对于其他请求,不进行拦截
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
   
   
        // 请求处理完成后的逻辑,如果需要的话
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
   
   
        // 请求完成后的逻辑,如果需要的话
    }

}

2、注入拦截器

@Configuration
public class WebConfig implements WebMvcConfigurer {
   
   
	
	@Resource
	private ExportExcelInterceptor exportExcelInterceptor;

	@Override
	public void addCorsMappings(CorsRegistry registry ){
   
   
		//
	}
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry ){
   
   
		// 
	}
	
	@Override
	public void addInterceptors(InterceptorRegistry registry ){
   
   
		// 注入自己写的拦截器
		registry.addInterceptor(exportExcelInterceptor);
	}
 }

3、实现导出

@Component
@Slf4j
public class ExportUtil {
   
   

    @Autowired
    private e jmReportDesignService;
    @Autowired
    private JmReportBaseConfig jmBaseConfig;
    @Autowired
    private JimuReportDbDao jimuReportDbDao;

    @Autowired
    private JimuReportDao reportDao;

    @Autowired
    private IJimuReportService jimuReportService;


    public  void exportExcel(HttpServletRequest request, HttpServletResponse response, final Object handler) throws Exception{
   
   
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.addHeader("Content-Disposition", "attachment;filename=jmexport.xlsx");
        log.info("===========exportAllExcelStream 执行导出EXCEL action ==========");
        HashMap map = new HashMap(request.getParameterMap());
        // 获取请求参数
        StringBuilder body = new StringBuilder();
        String line;
        try (BufferedReader reader = request.getReader()) {
   
   
            while ((line = reader.readLine()) != null) {
   
   
                body.append(line);
            }
        }
        JSONObject jsonObject = JSONObject.parseObject(body.toString());
        boolean isToken = map.containsKey("token");
        if (isToken) {
   
   
            map.remove("token");
        }
        String excelConfigId = jsonObject.getString("excelConfigId");
        JSONObject queryParam = jsonObject.getJSONObject("queryParam");
        Map<String, Object> resMap = this.d(excelConfigId);
        List downCodeList = (List)resMap.get("downCodeList");
        Integer var16 = this.jmBaseConfig.getPageSizeNumber();
        this.getData(response, excelConfigId, queryParam, downCodeList, var16);
    }


    public Map<String, Object> getData(HttpServletResponse response, String var1, JSONObject var2, List<String> var3,  int var5)
            throws IOException {
   
   
        HashMap var6 = new HashMap(5)
Pandas多维聚合七种硬核模式:从交易数据到高管简报 多维聚合是数据分析的核心能力,指在多个业务维度(如时间、地域、品类、用户)上同步执行统计计算,而非简单链式groupby。其底层依赖向量化计算原理与内存友好的分组机制,技术价值在于保障高并发场景下的低延迟、强一致与可复现性。典型应用场景覆盖金融风控指标构建、电商用户行为分析、SaaS客户健康度建模等强分析型业务。本文聚焦pandas中经生产验证的七种聚合模式——包括多列差异化聚合、自定义聚合函数、滚动/扩展窗口、unstack多级透视及条件化复合指标,特别强调多列聚合的列名扁平化处理与自定义函数的向量化实现 阅读详情

相关推荐

SQL建表设计核心指南:从CREATE TABLE到生产级表管理

数据库表结构是数据系统稳定运行的根基,CREATE TABLE不仅是语法操作,更是业务建模与数据治理的起点。理解字段类型选择原理(如NVARCHAR vs VARCHAR、BIGINT主键必要性)、约束机制(CHECK/NOT NULL/外键)和索引设计逻辑(覆盖索引、聚簇索引影响),能显著提升查询性能与数据一致性。在金融、电商、医疗等高要求场景中,建表决策直接影响分库分表扩展性、跨时区时间处理、敏感字段加密合规等关键能力。本文聚焦SQL建表全生命周期实践——涵盖CREATE TABLE规范、ALTER T

cuiji1279的博客 495

Databricks REST API 实战指南:数据工程师的自动化生产工具箱

Databricks REST API 是构建可编程、可观测、可审计数据平台的核心技术底座,其本质是基于 HTTP 协议的标准化系统间通信机制,遵循请求-响应模型与状态码语义。它通过统一认证(Token/OAuth)、资源化端点(Jobs/Clusters/DBFS)和幂等设计,赋予数据管道确定性执行能力与故障自愈基础。相比 UI 点击或封装 CLI/SDK,REST API 提供跨语言、跨调度器(Airflow/Prefect)的工程一致性,并天然支持监控埋点、审计日志与权限精细化管控。典型应用场景包括定

weixin_30753873的博客 657

易语言离线OCR模块开发:基于飞浆PaddleOCR的封装与实战

OCR(光学字符识别)技术是计算机视觉领域的关键分支,其核心原理是通过算法模型自动检测并识别图像中的文字信息。这项技术具有极高的实用价值,广泛应用于文档数字化、票据处理、自动化数据录入等场景。对于易语言开发者而言,在本地环境中集成高效、易用的OCR功能是常见的开发需求。本文聚焦于如何将前沿的飞浆PaddleOCR引擎封装为易语言模块,实现无网离线使用,并确保在Win7/Win10等不同系统下的兼容性。通过解析模块的核心架构、接口设计及参数调优,为开发者提供一套开箱即用的解决方案,有效解决了易语言生态中调用复

weixin_33984032的博客 815

积木报表换行bug修复的资源

积木报表换行bug修复的资源、适用于积木报表调用后端API、解决换行BUG、换页BUG的问题

基于分位数回归的静态CoVaR计算 案例与代码

原文链接:https://bbs.pinggu.org/thread-7925441-1-1.html 一、静态CoVaR模型介绍 二、资料简介 实现对相关期刊论文进行论文重现,解决实证分析中的技术操作问题。里面包含了每一步详细的步骤,可以方便的利用这个手册解决大部分利用分位数回归计算静态CoVaR的论文的模型实现问题。即从数据下载到模型实现一整条操作步骤。 关键词:【分位数回归】【Co...

ChenQihome9的博客 7489

Coze:手把手教你搭建 小红书二创 智能体

前一篇 “” ,讲了如何针对需求进行拆解,并拆解 ”小红书二创“ 智能体,分为四个内容模块。通过上述步骤,开始一步一步构建 “小红书二创” 智能体。用来测试的小红书地址:http://xhslink.com/a/quxWEDAj3J48。

保持敏感!保持学习! 1425

经典密码体制(上)

头歌

shannidawang的博客 3081

MFC界面库BCGControlBar v32.0 - 对话框、仪表盘控件升级

亲爱的BCGSoft用户,我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFCv32.0正式发布!新版本支持Windows 11、增强功能区简化模式、改进控件外观等,以及其他新功能和改进。需要最新版的可以点击这里【BCG下载】 BCGControlBar Pro for MFC v32.0正式版下载 对话框和表单 1. 添加了一个新的全局标志globalData.m_bAutoPrepareComboListStyles:如果您希望.

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1138

RK806S PMIC电源管理芯片调试

当点按PWRON按键时,rk806上电开始启动bootloader和uboot,在执行到此处时检测到是由于按键启动的,所以0x5d的值是0x80,0x74的值是0x80,在一般情况下,mode都默认是none的,所以mode值为11,因此就进入了我们的if判断,若是由于按键启动的,则直接调用rk8xx_shutdown函数关掉,进入这个函数会看到实际是通过i2c给0x72寄存器的BIT(0)写1,使其关机。当SoC在12V电源已经接入,且处于关机状态时,使用PWRON按键开机,0x74的值则为0x80。

Y1anoohh的博客 2526

2026年ERP选型实战:按规模分档,避开成本与实施陷阱

企业资源计划(ERP)是现代企业数字化转型的核心系统,它将财务、供应链、制造、人力等业务整合到统一平台。随着云计算和人工智能技术的发展,ERP已从传统本地部署的记录工具演变为SaaS订阅制、具备AI辅助决策能力的智能运营平台。不同规模企业在选型时的关注点差异巨大:小微企业追求轻量化和快速出报表,中型企业需要在流程标准化与业务灵活性间取得平衡,大型集团则注重多法人管控和数据治理。此外,制造、电商、工程等行业对ERP的模块要求也各有侧重,成本核算数据跑不通更是普遍痛点。如何结合企业规模与行业特征,制定合理的选型

weixin_34320724的博客 375

[23]-->变长SPI接口

然而,FPGA技术复杂,学习门槛较高,许多人(初学者或学生)在学习过程中面临诸多挑战。(1)模式0:SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 0,CPHA=0;(2)模式1:SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换,CPOL= 0,CPHA=1;(3)模式3:SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 1,CPHA=1;

m0_46498597的博客 168

Vue3 - Element Plus 下拉选择器 el-select 覆盖修改 placeholder样式,解决覆盖不生效问题(支持修改文字颜色、文字大小、选择器边框、hover效果、宽高等任意样式

vue3,element-plus,el-select,下拉选择器,下拉选择框,Select选择器,deep覆盖无效怎么办,怎么修改placeholder文字颜色,选择器select修改边框样式,修改文字大小,elementPlus选择器如何覆盖hover效果,使用deep改不了样式,修改边框颜色,select去掉边框,vue3+elementPlus中select选择器如何修改placeholder文字样式,修改el-select样式,select选择器样式覆盖不了咋办,el-select如何覆盖原样式,

🏆 前端领域优质创作者 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: redis缓存失效问题
下一篇: java将pdf转换成word
南博萬
博客等级 码龄9年 130粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值