Anylogic中Excel 文件(Excel file)的使用

Excel 文件连接工具提供了在 AnyLogic 模型中轻松访问 MS Excel(.xls, .xlsx)文件的平台无关方式。使用此对象,您可以:

  • 读取 Excel 文件并浏览其内容,
    演示模型: 读取和写入 Excel 文件
    在 AnyLogic Cloud 中打开模型页面。在那里,您可以运行模型或下载它(通过点击模型源文件)。
  • 读取各种类型的单个单元格的值和公式,
    演示模型: 从单元格中读取不同数据类型的数据
    在 AnyLogic Cloud 中打开模型页面。在那里,您可以运行模型或下载它(通过点击模型源文件)。
  • 读取 AnyLogic 表函数的内容,
  • 读取 AnyLogic 一维和二维数组,
  • 创建新的单元格
  • 写入单个单元格并更改其类型,
  • 将 AnyLogic 数据集写入 Excel 电子表格,
    演示模型: 在 Excel 中将模型输出显示为图表
    在 AnyLogic Cloud 中打开模型页面。在那里,您可以运行模型或下载它(通过点击模型源文件)。
  • 保存修改后的电子表格。

如何添加 Excel 文件访问工具

  1. 连接 面板中拖动 Excel 文件 元素到图形图表上。您也可以直接从其他应用程序拖动 Excel 文件到 AnyLogic 图形图表上。在这种情况下,AnyLogic 会自动在图形图表上添加一个新的 Excel 文件 元素,其中包含添加的 Excel 文件。

  2. 属性 视图中,更改元素的 名称。此名称将用于从代码中识别和访问此对象。

  3. 文件 字段中,指定此元素将要使用的工作簿文件。点击 浏览 按钮定位文件。

    如果文件存储在模型文件夹中,文件 字段将显示相对路径;否则,它将显示绝对路径。一旦选定,源文件将自动出现在 项目 视图的模型资源文件夹中。这样,您将能够跟踪源文件的当前状态,在绝对和相对文件路径之间切换等。

  4. 转到 高级 部分。保留选中的 模型启动时加载 复选框。这将在模型启动时自动从文件加载工作簿,并允许您使用此 Excel 文件。

  5. 如果您期望在指定的 Excel 文件中保存一些数据,请保留选中的 模型终止时保存 复选框。这将使您免于调用此访问工具的 writeFile() 函数以将所有更改提交到 Excel 文件:这将在模型退出时自动完成。

操作 Excel 文件的 API

使用 ExcelFile 对象的 API 来操作 Excel 文件。以下是 API 中最有用的函数列表,在 API 部分。这些函数中的大多数具有几种不同的参数集和表示法。查找您需要的操作,然后展开适当的部分并找到最适合您需求的函数。

在执行任何 Excel 文件操作之前,调用 readFile() 函数。或者,在该对象的属性中选择 模型启动时加载 选项:在这种情况下,当模型启动时,工作簿将自动从文件加载。

从 Excel 文件中读取

读取 Excel 文件:readFile()

函数 描述
void readFile() 从文件加载工作簿。 在此函数调用后,工作簿中的所有未保存数据(如果有)将丢失。

获取指定单元格的类型:getCellType()

getCellType() 函数返回单元格的类型(数字、公式、字符串等)。

该函数有三种不同的参数集表示法。它们在指定单元格的方式上有所不同。

函数 描述
getCellType(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格:工作表索引、行索引、列索引。
getCellType(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格,分别是行索引和列索引。
getCellType(String cellName) 通过其名称指定单元格,格式如下:<sheet name>!<column name> <rownumber>,例如:Sheet1!A3。 可以省略工作表名称,则将采用第一张工作表。

从单元格中读取布尔值

getCellBooleanValue() 函数将单元格的值作为布尔值返回。对于字符串、数字和错误,会抛出异常。对于空单元格,返回 false。

函数 描述
boolean getCellBooleanValue(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格:工作表索引、行索引、列索引。
boolean getCellBooleanValue(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格,分别是行索引和列索引。
boolean getCellBooleanValue(String cellName) 通过其名称指定单元格,格式同上。

从单元格中读取数值

getCellNumericValue() 函数将单元格的值作为数字返回。对于字符串,会抛出异常。对于空单元格,返回 0。

函数 描述
double getCellNumericValue(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
double getCellNumericValue(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
double getCellNumericValue(String cellName) 通过其名称指定单元格,格式同上。

从单元格中读取字符串值

getCellStringValue() 函数将单元格的值作为字符串返回。对于数字单元格,会抛出异常。对于空单元格,返回空字符串。对于不是字符串公式的公式单元格,返回空字符串。

函数 描述
String getCellStringValue(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
String getCellStringValue(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
String getCellStringValue(String cellName) 通过其名称指定单元格,格式同上。

从单元格中读取日期值

getCellDateValue() 函数将单元格的值作为日期返回。对于字符串,会抛出异常。对于空单元格,返回 null。

函数 描述
Date getCellDateValue(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
Date getCellDateValue(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
Date getCellDateValue(String cellName) 通过其名称指定单元格,格式同上。

获取指定单元格定义的公式

getCellFormula() 函数返回单元格的公式,例如:SUM(C4:E4)。

函数 描述
String getCellFormula(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
String getCellFormula(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
String getCellFormula(String cellName) 通过其名称指定单元格,格式同上。

获取指定单元格定义的公式类型

getCellFormulaType() 函数仅对公式单元格有效,返回公式单元格的类型。

函数 描述
getCellFormulaType(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
getCellFormulaType(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
getCellFormulaType(String cellName) 通过其名称指定单元格,格式同上。

读取单元格的错误代码值

getCellErrorValue() 函数将单元格的值作为错误代码返回。对于字符串会抛出异常。对于空单元格,返回 null。

函数 描述
byte getCellErrorValue(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
byte getCellErrorValue(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
byte getCellErrorValue(String cellName) 通过其名称指定单元格,格式同上。

将 Excel 文件中的数据读入 AnyLogic 表函数

readTableFunction() 函数将 Excel 文件中的数据读入指定的表函数。

如果工作表中的数据不足以填满长度,则表函数将获得较少的点。

该函数返回从工作表实际读取的表函数点数。

参数:

  • tableFunction --- 要填充的表函数。
  • length --- 要读取的表函数点数。
函数 描述
int readTableFunction(TableFunction tableFunction, int sheetIndex, int rowIndex, int columnIndex, int length) 从索引为 sheetIndex 的工作表开始,从索引为 rowIndex 的行读取表函数: - 参数从 columnIndex 列读取, - 值从 columnIndex 1 列读取。
int readTableFunction(TableFunction tableFunction, String sheetName, int rowIndex, int columnIndex, int length) 从名称为 sheetName 的工作表开始,从索引为 rowIndex 的行读取表函数: - 参数从 columnIndex 列读取, - 值从 columnIndex 1 列读取。
int readTableFunction(TableFunction tableFunction, String cellName, int length) 从给定单元格的行开始,读取表函数: - 参数从给定单元格的列读取, - 值从给定单元格旁边的列读取, 单元格通过名称指定,格式如下:<sheet name>!<column name> <row number>,例如:Sheet1!A3。 可以省略工作表名称,则将采用第一张工作表。

将 Excel 文件中的数据读入 AnyLogic 超级数组

readHyperArray() 函数从给定单元格开始,读取一维或二维超级数组数据。

参数:

  • array --- 要写入数据的超级数组,应具有 1 或 2 个维度。
  • dim1AcrossRows --- 使用 true 来读取对应第一维度的数据,跨工作表行(即,在这种模式下,一维数组的数据从工作表列中加载)。
函数 描述
void readHyperArray(HyperArray array, int sheetIndex, int rowIndex, int columnIndex, boolean dim1AcrossRows) 使用三个数字(基于1的)指定单元格:工作表索引、行索引、列索引。
void readHyperArray(HyperArray array, String sheetName, int rowIndex, int columnIndex, boolean dim1AcrossRows) 使用工作表名称和两个数字(基于1的)行索引和列索引来指定单元格。
void readHyperArray(HyperArray array, String cellName, boolean dim1AcrossRows) 通过名称指定单元格,格式如下:<sheet name>!<column name><row number>,例如,Sheet1!A3。 可以省略工作表名称,则假定为第一张工作表。

向 Excel 文件写入数据

调用 writeFile() 函数以将更改提交到 Excel 文件。或者,在 Excel 文件 对象的属性中选择 模型终止时保存 选项:在这种情况下,当模型退出时,更改将自动保存。

将更改保存到 Excel 文件

函数 描述
void writeFile() 将当前工作簿存储到文件中。工作簿应该已经加载。未保存的工作簿(带有未保存数据的工作簿)不会被保存。要保存到不同位置,请在 writeFile() 之前调用 setFileName(String) 函数。

创建具有指定索引的单元格

createCell() 函数在给定位置创建一个新单元格。

函数 描述
void createCell(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格:工作表索引、行索引、列索引。
void createCell(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格,分别是行索引和列索引。
void createCell(String cellName) 通过其名称指定单元格,格式如下:<sheet name>!<column name> <row number>,例如:Sheet1!A3。 可以省略工作表名称,则将采用第一张工作表。

向单元格中写入值

setCellValue() 函数为指定单元格设置给定值。该函数可以接受所有最常见的类型值:布尔值、双精度浮点数、字符串、日期。

函数 描述
void setCellValue(<typename> value, int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格:工作表索引、行索引、列索引。
void setCellValue(<typename> value, String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格,分别是行索引和列索引。
void setCellValue(<typename> value, String cellName) 通过其名称指定单元格,格式同上。

为指定单元格设置公式

setCellFormula() 函数为指定单元格设置公式。公式通过函数参数 formula 传递,即 "SUM(C4:E4)"。如果此参数为 null,则删除当前公式。

此函数仅设置公式字符串,不计算公式值。要计算公式,请调用 evaluateFormulas() 函数。

函数 描述
void setCellFormula(String formula, int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
void setCellFormula(String formula, String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
void setCellFormula(String formula, String cellName) 通过其名称指定单元格,格式同上。

将 AnyLogic 数据集写入 Excel 文件

writeDataSet() 函数从给定单元格开始将给定数据集写入工作表。数据按行以两列的形式写入:用于 X 和 Y 组件。

函数 描述
int writeDataSet(DataSet dataset, int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
int writeDataSet(DataSet dataset, String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
int writeDataSet(DataSet dataset, String cellName) 通过其名称指定单元格,格式同上。 该函数返回数据集的大小。

验证和辅助操作

获取 Excel 文件中的工作表数量

getNumberOfSheets()

函数 描述
int getNumberOfSheets() 返回工作簿中电子表格的数量。

获取指定工作表的名称

getSheetName()

函数 描述
String getSheetName(int sheetIndex) 返回指定索引 sheetIndex 的工作表的名称。

检查指定单元格是否存在

cellExists()

cellExists() 函数返回 true 如果给定位置的单元格在工作簿中存在。

函数 描述
boolean cellExists(int sheetIndex, int rowIndex, int columnIndex) 通过三个数字(基于1的)指定单元格。
boolean cellExists(String sheetName, int rowIndex, int columnIndex) 通过工作表名称和两个数字(基于1的)指定单元格。
boolean cellExists(String cellName) 通过其名称指定单元格,格式同上。

获取工作表的第一行号

getFirstRowNum()

getFirstRowNum() 函数返回工作表的第一逻辑行号(使用基于1的索引)。

函数 描述
int getFirstRowNum(int sheetIndex) 通过其索引指定工作表。
int getFirstRowNum(String sheetName) 通过其名称指定工作表。

获取工作表的最后一行号

getLastRowNum()

getLastRowNum() 函数返回工作表的最后一逻辑行号(使用基于1的索引)。

函数 描述
int getLastRowNum(int sheetIndex) 通过其索引指定工作表。
int getLastRowNum(String sheetName) 通过其名称指定工作表。

获取行中的第一个单元格号

getFirstCellNum()

getFirstCellNum() 函数返回指定行中包含的第一个单元格的编号。具体来说,它返回包含行中第一个逻辑单元格的列的编号(使用基于1的索引),如果行不包含任何单元格,则返回 0。

函数 描述
int getFirstCellNum(int sheetIndex, int rowIndex) 通过索引指定工作表和行。
int getFirstCellNum(String sheetName, int rowIndex) 通过名称指定工作表;行通过索引。

获取行中的最后一个单元格号

getLastCellNum()

getLastCellNum() 函数返回指定行中包含的最后一个单元格的编号。具体来说,它返回包含行中最后一个逻辑单元格的列的编号(使用基于1的索引),如果行不包含任何单元格,则返回 0。

函数 描述
int getLastCellNum(int sheetIndex, int rowIndex) 通过索引指定工作表和行。
int getLastCellNum(String sheetName, int rowIndex) 通过名称指定工作表;行通过索引。

在 Excel 文件中评估公式

evaluateFormulas()

函数 描述
void evaluateFormulas() 评估工作簿中包含公式的所有单元格的公式,并保存结果。 单元格保留为公式单元格。请注意,您的单元格将同时包含公式和结果。如果您希望单元格替换为公式的结果,请使用以下函数: org.apache.poi.ss.usermodel.Cell.evaluateInCell(org.apache.poi.ss.usermodel.Cell)
相关推荐
Abladol-aj36 分钟前
并发和并行的基础知识
java·linux·windows
清水白石00837 分钟前
从一个“支付状态不一致“的bug,看大型分布式系统的“隐藏杀机“
java·数据库·bug
吾日三省吾码6 小时前
JVM 性能调优
java
弗拉唐7 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi778 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
少说多做3438 小时前
Android 不同情况下使用 runOnUiThread
android·java
知兀8 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
蓝黑20208 小时前
IntelliJ IDEA常用快捷键
java·ide·intellij-idea
Ysjt | 深8 小时前
C++多线程编程入门教程(优质版)
java·开发语言·jvm·c++