如何在不导入的情况下将excel电子表格导入anylogic数据库,即在主启动时使用代码
Posted
技术标签:
【中文标题】如何在不导入的情况下将excel电子表格导入anylogic数据库,即在主启动时使用代码【英文标题】:How to get an excel spreadsheet into anylogic database, without importing it i.e. using code on the main startup 【发布时间】:2021-01-18 00:27:49 【问题描述】:以前我以常用的方式导入了我的 excel 电子表格。现在我想通过在 main 中编写代码来自动获取我的信息。到目前为止,我已经编写了以下内容来获取单个单元格,但我想了解如何从多行和多列中获取信息。
insertInto(db_table).columns(db_table.db_column).values(data.getCellNumericValue("Sheet1", 5, 4)).execute();
【问题讨论】:
【参考方案1】:只需在所有工作表 (getNumberOfSheets()
)、所有列 (getLastCellNum(row)
) 和所有行 (getLastRowNum()
) 上使用 for 循环。
AnyLogic help 中为您详述的 API 调用(在底部):)
【讨论】:
顺便说一句:如果没有具体原因,在模型启动时将整个 xls 书简单地加载到 AL 数据库中并使用 SQL 从数据库中查询会更容易和更优雅... 如果excel电子表格有很多表,我想要一个特定的表怎么办。加载到数据库时,列名也是随机的, 您可以选择要导入的工作表/表格。列名与在工作表最顶行中找到的相同。 (您必须正确格式化您的 Excel,并确保第 1 行是名称没有空格和非 unicode 字母的列标题行) 这一切都在帮助中:) help.anylogic.com/… 嗨。您能否举一个跨所有工作表、列和行的 for 循环示例【参考方案2】:如果您想通过代码自动上传数据表,而不是依赖于 AnyLogic 复选框,您可以使用以下(上一个项目中的示例):
public void importTableDataOnStartup(java.sql.Connection internalDatabaseConnection) throws Exception
try (DatabaseDescriptorRegistry r = new DatabaseDescriptorRegistry())
java.sql.Connection cachedSourceConnection;
cachedSourceConnection = r.getConnection(DatabaseDescriptorFactory.createFileDescriptor( Utilities.findExistingFile("..\\ExcelData\\" + ebFileName.getText() + ".xlsx"), null, ""));
UtilitiesDatabase.copyDatabaseTable(cachedSourceConnection, internalDatabaseConnection, "\"PhysicianTypes\"", "physician_types");
UtilitiesDatabase.copyDatabaseTable(cachedSourceConnection, internalDatabaseConnection, "\"PatientFlow\"", "patient_flow");
UtilitiesDatabase.copyDatabaseTable(cachedSourceConnection, internalDatabaseConnection, "\"Referrals\"", "referrals");
UtilitiesDatabase.copyDatabaseTable(cachedSourceConnection, internalDatabaseConnection, "\"Incident Patient Rate\"", "incident_patient_rate");
UtilitiesDatabase.copyDatabaseTable(cachedSourceConnection, internalDatabaseConnection, "\"PatientDeathRates\"", "patient_death_rates");
traceln("Database import is complete.");
在上面的代码中,用户可以通过编辑框(ebFileName.getText())选择一个Excel文件名。模型中已经设置了一些数据库表,这会更新它们。
我不得不这样做,因为表太大了,每次启动都需要 30 秒才能更新表。实际上,我的客户真的不需要更改这些表,而是想要一种机制来“以防万一”。我们在实验窗口中添加了一个按钮,让他们可以根据需要在启动时上传。
我要求 AnyLogic 添加一个 table.upload() 类型的命令来简化此操作。他们说它在他们未来版本的开发列表中,但我还没有在他们的发行说明中看到它。
【讨论】:
以上是关于如何在不导入的情况下将excel电子表格导入anylogic数据库,即在主启动时使用代码的主要内容,如果未能解决你的问题,请参考以下文章
如何在不写入磁盘的情况下将 AWS S3 上的文本文件导入 pandas
如何在不使用任何付费工具的情况下将 dbf 文件导入 mysql?
有没有办法在不安装任何驱动程序的情况下将表从雪花导入 R 中的数据帧?
如何在不使用 import_url 的情况下将特定文件导入新创建的 Gitlab 项目?