2016-05-27 9 views
0

Ich möchte die Daten für einen dreidimensionalen Parameter p (i, j, k) importieren, der in Excel-Tabellen gespeichert ist, aber GAMS lässt mich keine Dollar-Steueranweisungen in Schleifen verwenden. Gibt es eine Möglichkeit, dies zu tun, Schleifen oder andere Flow-Control-Anweisungen wie "für" oder "während" verwenden?Wie importiert man Daten aus mehreren Excel-Tabellen in GAMS mit Schleifen?

brauche ich so etwas zu tun, aber es ist scheinbar unmöglich:

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

posten Bitte Code –

Antwort

0

jedes Blatt Angenommen, sieht so aus:

enter image description here

(einziger Unterschied ist, I 2 die Verwendung in sheet2 und 3s in Blatt3).

dies tun zu lesen:

$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; 

Meine Ergebnisse sind:

----  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