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

如何在IBM ILOG CPLEX OPL中用SheetRead读取Excel嵌套数组?

用SheetRead实现分位置球员集合读取的正确方法

1. 修正Mod文件中的声明

首先确保Mod文件里的集合和集合数组声明正确,无需提前初始化,留空待数据文件赋值:

{string} Q = {"GK", "DEF", "MID", "FWD"};
{string} Pq[Q]; # 声明以Q为索引的字符串集合数组

2. 数据文件中的正确SheetRead写法

你之前的写法存在语法错误,AMPL中给集合数组元素赋值必须使用let关键字和:=赋值运算符,正确写法如下:

单个位置赋值(明确单元格范围)

如果每个位置的球员在Excel的固定列范围中,直接指定对应单元格读取:

# 读取GK位置球员(PricePoints工作表A2:A6)
let Pq["GK"] := SheetRead(FplGwData, "PricePoints!A2:A6");
# 读取DEF位置球员(PricePoints工作表B2:B8)
let Pq["DEF"] := SheetRead(FplGwData, "PricePoints!B2:B8");
# 读取MID位置球员(PricePoints工作表C2:C9)
let Pq["MID"] := SheetRead(FplGwData, "PricePoints!C2:C9");
# 读取FWD位置球员(PricePoints工作表D2:D7)
let Pq["FWD"] := SheetRead(FplGwData, "PricePoints!D2:D7");

批量循环读取(适配动态列/范围)

如果Excel中每个位置对应一列(列名与Q中的元素一致,或有固定映射),可以用循环批量读取,还能自动识别连续非空单元格:

# 定义位置到Excel列标的映射
param col_map{Q} symbolic;
let col_map["GK"] := "A";
let col_map["DEF"] := "B";
let col_map["MID"] := "C";
let col_map["FWD"] := "D";

# 循环读取每个位置的球员集合
for {q in Q} {
  # 从对应列的第2行开始,自动读取所有连续非空单元格
  let Pq[q] := SheetRead(FplGwData, "PricePoints!" & col_map[q] & "2:" & col_map[q]);
}

常见错误说明

  • 缺少let关键字:AMPL中给已声明的集合/变量赋值必须通过let语句
  • 赋值运算符错误:需使用:=而非from
  • 单元格范围错误:确保工作表名、列标、行号与Excel实际内容匹配,注意大小写敏感性(取决于操作系统)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:07:42