Database 事件触发时将数据库从Anylogic导出到Excel

Database 事件触发时将数据库从Anylogic导出到Excel,database,export-to-excel,anylogic,Database,Export To Excel,Anylogic,我想在某个事件触发时将AnyLogic数据库导出到Excel。但是,我可以看到的唯一导出选项是在模型暂停时手动导出,或在模型关闭时自动导出 有人能帮我看一下Java代码片段或是参考资料吗 附属问题(如果以上是可能的):你能从任何逻辑, 1.在Excel中创建新工作表以将数据写入? 2.重新标记工作表,以便其名称可以包括(例如)时间戳?Eric,您可以在模拟运行时的任何给定时间将数据导出到Excel文件。。。例如,以下代码在第一页、第一行和第一列中写入“值”: excelFile.readFile

我想在某个事件触发时将AnyLogic数据库导出到Excel。但是,我可以看到的唯一导出选项是在模型暂停时手动导出,或在模型关闭时自动导出

有人能帮我看一下Java代码片段或是参考资料吗

附属问题(如果以上是可能的):你能从任何逻辑, 1.在Excel中创建新工作表以将数据写入?
2.重新标记工作表,以便其名称可以包括(例如)时间戳?

Eric,您可以在模拟运行时的任何给定时间将数据导出到Excel文件。。。例如,以下代码在第一页、第一行和第一列中写入“值”:

excelFile.readFile();
excelFile.setCellValue("the value",1,1, 1);//value,sheetName or number, row, column
excelFile.writeFile();
何时使用此选项没有限制。您可以在帮助文档中找到所有Excel API,以发现所有读写数据的方法

但是您无法控制工作表的名称或通过API创建新工作表。。。据我所知

我想在某个事件触发时将AnyLogic数据库导出到Excel

可以,您可以通过编程方式从AnyLogic数据库导出表(即,执行手动“将表导出到Excel”或自动“在模型执行结束时导出表”的操作)。但是,是的,没有这方面的真正文档,从帮助中的API引用中计算出所需的逻辑并不容易(特别是当前
exportToExternalDB
方法的详细信息中存在错误,尽管任何逻辑都应该很快修复该文档)

代码示例如下所示。除了您的需求之外,这样做的主要原因是它允许您动态确定输出文件名(或动态确定输出哪些表)

NB:这要求Excel文件存在,且其中已存在所需的工作表和列名标题行。但您可以手动导出一次空表以生成该文件(如果您想更改输出文件名,可以在导出之前添加代码,使用标准Java文件处理代码将导出的骨架文件复制到所需的名称文件)

还有一种方法可以通过编程方式创建Excel文件和所需的“框架”内容,使用更低级的Java和AnyLogic在封面下使用的连接Excel的方法。这也可以用来解决你的附属问题(见下文)

你能,从任何逻辑,1。在Excel中创建新工作表以将数据写入?2.重新标记工作表,以便名称可以包括(比如)时间戳

示例代码如下(其中输出文件名存储在
字符串
变量
文件名
)。注意,这是使用ApachePOI的“AnyLogic独立”Java;此代码中没有使用任何AnyLogic类的内容。因为AnyLogic已经在内部包含了ApachePOI作为库,所以不需要添加任何作为模型依赖项的内容

try (FileOutputStream fileOut = new FileOutputStream(fileName)) {
    Workbook wb = new XSSFWorkbook();
    // Create a worksheet for the table
    Sheet sheet = wb.createSheet("output_table"); 
          
    // Create a header row with the required column names in. Row indices are 0 based
    Row row = sheet.createRow(0);
    row.createCell(0).setCellValue("col1");
    row.createCell(1).setCellValue("col2");
    row.createCell(2).setCellValue("col3");

    // Write the output to a file
    wb.write(fileOut);      
} catch (Exception e) {
    [Handle exceptions in some way]
}
您需要在代理/实验中使用一些必需的
import
语句,该代码位于其中(在属性的“导入”部分中):


谢谢,我来看看。我更希望使用excelFile.EXPORTDABASE(“database name”,TargetSheet)类型的命令,这样我就不必在数据库中的所有列和行中循环数据的累积。唯一的自动非循环方式是使用writeDataSet函数导出数据集,我希望重新调整导出数据库的代码的用途,而不是数据集,当在数据库属性上勾选“在模型执行结束时导出表”框时,将使用该数据集。它调用“UtilitiesDatabase.exportTables”,但我无法确定它的internalDatabaseConnection和targetConnection参数应该是什么。。。真的没想过这种可能性
try (FileOutputStream fileOut = new FileOutputStream(fileName)) {
    Workbook wb = new XSSFWorkbook();
    // Create a worksheet for the table
    Sheet sheet = wb.createSheet("output_table"); 
          
    // Create a header row with the required column names in. Row indices are 0 based
    Row row = sheet.createRow(0);
    row.createCell(0).setCellValue("col1");
    row.createCell(1).setCellValue("col2");
    row.createCell(2).setCellValue("col3");

    // Write the output to a file
    wb.write(fileOut);      
} catch (Exception e) {
    [Handle exceptions in some way]
}
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Cell;