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
相关产品推荐
相关产品推荐

