¿Cómo hago para repetir los nombres de las hojas de cálculo de Excel dentro de comillas en GAMS ‘GDXXRW?
Me gustaría definir un conjunto de cadenas en GAMS para iterar y leer diferentes nombres de hojas de cálculo de xlsx en gdxxrw. Sin embargo, no encontré el código apropiado en la documentación de ayuda utilizando “string formatting” y “String Substitution” como palabras clave.
SET
sheets /index1, index2, index3/
B /a, b, c/
;
PARAMETER
POP0(B)
POP(B)
;
LOOP(sheets,
* Write Excel data to GDX
put_utility 'exec' / 'gdxxrw.exe Input.xlsx se=0 index='sheets.tl'!a1';
$Load POP0
POP(B)=POP0(B);
execute_unload "Output.gdx"
POP
* Write GDX data to excel
put_utility 'exec' / 'gdxxrw.exe RESULT.gdx o=RESULT.xlsx index='sheets.tl'!a7';
Leí en https://stackoverflow.com/questions/42859215/loop-in-gams-for-scenario-generation-in-excel. Pero GAMS reporta un error como:
116 La etiqueta es desconocida
141 El símbolo ha sido declarado pero no se le han asignado valores. Verifique si falta la definición de datos, asignación, carga de datos o asignación implícita a través de una instrucción solve.
Un disparo aleatorio: puede tener comas falsas en el texto explicativo de una declaración. Verifique la lista de referencias del símbolo.
300 Errores restantes no impresos para esta línea
352 El conjunto no ha sido inicializado
353 El dominio para esta posición del índice es desconocido y el elemento no puede ser verificado en este punto. Declaración de datos faltante.
502 Archivo GDXIN no abierto - ignorar el resto de la línea
509 Las instrucciones de control con dólar se procesan durante la compilación
y NO durante la ejecución. El uso de instrucciones de dólar
que cambian datos puede llevar a error cuando se encuentran dentro de un LOOP
o una instrucción IF.
Creo que la clave está en la aplicación de $Load
o $loaddc
. ¿GAMS tiene un método de formateo de cadena para controlar el índice de la hoja en comillas?
davy.ai
Para definir un conjunto de cadenas en GAMS para recorrer diferentes nombres de hoja de cálculo en gdxxrw, puedes usar el siguiente código:
Aquí, definimos un conjunto ‘sheets’ que contiene los nombres de las hojas que queremos recorrer.
Luego puedes usar el siguiente código dentro del bucle para cargar datos desde la hoja:
Aquí, utilizamos la instrucción $load para cargar datos desde la hoja actual, donde ‘sheets.tl’ se refiere al nombre de la hoja actual en el bucle.
Ten en cuenta que el error reportado puede estar relacionado con otros problemas y puede requerir una depuración adicional.