You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KNIME中Python脚本刷新Excel公式时遇Java堆内存溢出问题求助

KNIME中Python脚本刷新Excel公式时Java堆内存溢出问题解决

问题详情

  • 我是KNIME新手,对Python了解不多。在KNIME工作流里,用Python脚本给特定模板推送数据后刷新公式,推送数据的脚本运行正常,但刷新Excel公式的节点报Java堆内存溢出错误。
  • 错误信息:

执行失败于Try-Catch块:java.lang.OutOfMemoryError: Java heap space
回溯(最近的调用最后):File "", line 18, in java.lang.java.lang.OutOfMemoryError: java.lang.OutOfMemoryError: Java heap space

  • 已将Knime.ini内存调整至8GB,相关Python代码如下:
import sys
from datetime import datetime
import shutil

from pandas import DataFrame
import jpype
import asposecells
from openpyxl.styles import Protection
jpype.startJVM()
from asposecells.api import *

IP=flow_variables['template_file_BASEL_RATIOS_TEMPLATE_path']
wb0=Workbook(IP)
worksheets=wb0.getWorksheets().get(2)
#for worksheet in worksheets: cells=worksheets.getCells()
wb0.calculateFormula()
for row in range(cells.getMaxRow() +1):
    for col in range(cells.getMaxColumn()+1):
        cell=cells.get(row, col)
        if cell.isFormula():
            #wb0.calculate_formula()
            cell.setValue(cell.getValue())
#jpype.shutdownJVM()
wb0.save(IP)

优化方案

1. 替换低效的单元格遍历逻辑

你的代码遍历了工作表所有单元格,数据量大时会持续占用内存。Aspose.Cells提供了批量转换公式为值的方法,无需逐个单元格处理:

import sys
import jpype
from asposecells.api import *

# 启动JVM时指定内存上限,避免与KNIME内存冲突
jpype.startJVM(jpype.getDefaultJVMPath(), "-Xmx6g")

IP=flow_variables['template_file_BASEL_RATIOS_TEMPLATE_path']
wb0=Workbook(IP)
# 获取目标工作表(索引为2)
worksheet = wb0.getWorksheets().get(2)

# 计算所有公式
wb0.calculateFormula()
# 批量将公式转换为计算后的值
worksheet.getCells().replaceFormulaWithValues()

wb0.save(IP)
# 释放JVM资源
jpype.shutdownJVM()

2. 优化JVM内存分配

虽然调整了Knime.ini,但jpype启动的JVM不会自动继承KNIME的内存设置,需手动指定内存参数,避免内存竞争。

3. 及时释放资源

  • 脚本结束时必须调用jpype.shutdownJVM(),释放JVM占用的内存
  • 处理完Workbook后调用wb0.dispose(),释放Aspose.Cells的资源

4. 拆分工作流节点

如果Excel文件过大,将数据推送和公式刷新拆分为两个独立的KNIME节点,减少单个节点的内存占用峰值

内容的提问来源于stack exchange,提问作者Amit Baghel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:07:02