我想导入存储在k excel表中的三维参数p(i,j,k)的数据,但是GAMS不允许我在循环中使用美元控制语句。有没有办法使用循环或其他流控制语句,如'for'或'while'?
我需要做这样的事情,但这似乎是不可能的:
loop(k,
$call gdxxrw Data.xlsx par=temp rng=k!A1:Z20 rdim=1 cdim=1
$gdxin Data.gdx
$load temp
$gdxin
p(i,j,k)=temp(i,j);
);
答案 0 :(得分:0)
假设每张纸看起来像:
(唯一不同的是我在sheet2中使用2,在sheet3中使用3)。
要阅读本文,请执行以下操作:
$set xls d:\tmp\test2.xlsx
$set gdx s.gdx
set
i /i1*i3/
j /j1*j5/
k 'sheet names' /Sheet1*Sheet3/
;
parameter
s(i,j) 'single sheet'
a(i,j,k) 'all data'
;
file f /task.txt/;
loop(k,
putclose f,'par=s rng=',k.tl:0,'!a1 rdim=1 cdim=1'/
execute 'gdxxrw i=%xls% o=%gdx% @task.txt trace=2';
execute_loaddc '%gdx%',s;
a(i,j,k) = s(i,j);
);
display a;
我的结果是:
---- 23 PARAMETER a all data
sheet1 sheet2 sheet3
i1.j1 1.000 2.000 3.000
i1.j2 1.000 2.000 3.000
i1.j3 1.000 2.000 3.000
i1.j4 1.000 2.000 3.000
i1.j5 1.000 2.000 3.000
i2.j1 1.000 2.000 3.000
i2.j2 1.000 2.000 3.000
i2.j3 1.000 2.000 3.000
i2.j4 1.000 2.000 3.000
i2.j5 1.000 2.000 3.000
i3.j1 1.000 2.000 3.000
i3.j2 1.000 2.000 3.000
i3.j3 1.000 2.000 3.000
i3.j4 1.000 2.000 3.000
i3.j5 1.000 2.000 3.000