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

AnyLogic仿真实验每次迭代重新导入Excel文件的问题求助

解决AnyLogic迭代时无法刷新Excel动态数据的问题

问题原因

AnyLogic会自动将Excel文件复制到运行临时目录并缓存,即便原Excel因内置公式动态更新内容,模型仍会读取缓存的旧文件,导致每次迭代参数无变化。

可行解决方案

1. 直接通过JDBC读取原Excel文件(推荐)

绕开AnyLogic的Excel对象缓存,手动构建JDBC连接访问原文件,确保每次迭代读取最新内容。修改after iteration中的代码:

// 替换为你的Excel文件绝对路径,注意路径分隔符用/或转义\\
String excelAbsolutePath = "C:/Models/Data/dynamic_params.xlsx";
// 构建针对xlsx文件的JDBC连接串(useHeader=true表示首行为列名)
String jdbcConnection = "jdbc:excel:///" + excelAbsolutePath.replace("\\", "/") + "?useHeader=true";

ModelDatabase modelDB = getEngine().getModelDatabase();
// 直接通过JDBC连接创建外部数据库对象
Database dynamicExcelDB = new Database(this, "dynamic_excel_source", jdbcConnection);
// 导入数据覆盖模型内的rohdaten表
modelDB.importFromExternalDB(dynamicExcelDB.getConnection(), "Rohdaten", "rohdaten", true, false);

rowCounter += 1;

2. 提前清除临时缓存文件

如果JDBC方法仍有缓存残留,可在每次迭代开始前(before iteration)删除AnyLogic临时目录中的目标Excel缓存文件:

File tempFolder = new File(System.getProperty("java.io.tmpdir"));
// 匹配缓存的Excel文件名(部分匹配避免误删)
for (File tempFile : tempFolder.listFiles()) {
    if (tempFile.getName().contains("dynamic_params.xlsx")) {
        tempFile.delete();
    }
}

注意事项

  • 确保Excel文件在迭代间隙已完成公式计算并保存(若依赖自动保存,需确认Excel的自动保存功能开启)
  • 必须使用绝对路径,相对路径会触发AnyLogic的缓存机制
  • 若使用旧版.xls格式,JDBC连接串需改为jdbc:excel:///" + excelAbsolutePath,无需?useHeader=true参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:36:26