GAMS - 使用 GDX 将输出写入 excel 文件

GAMS - writing output to excel file using GDX

我正在将数据从 GAMS 导出到 excel。因此,我正在使用 GDX 实用程序。

假设我在集合 i 上定义了两个变量 x 和 y。集合 i={1,2,3,4}。因此,x(i) 和 y(i) 各有四个数据点。

我首先将输出卸载到 GDX 文件:

execute_unload "output_ex.gdx"
x
y   
;

之后,我将变量级别写入 Excel 文件。目前,我把它写成

execute 'gdxxrw.exe Output.gdx par=XXX rng=XXX   !a1'

execute 'gdxxrw.exe output_ex.gdx par=x rng=x!a1'
execute 'gdxxrw.exe output_ex.gdx par=y rng=y!a1'

这将创建一个 excel 文件,其中包含 2 sheets、x 和 y,每个包含 x 和 y 的 4 个值,从单元格 a1 开始,具有设置的索引 (i= 1..4) 在第一列中。相反,我想要一个 sheet。这可以通过说

来实现
execute 'gdxxrw.exe Output.gdx par=XXX rng=XXX   !a1'

execute 'gdxxrw.exe output_ex.gdx par=x rng=x!a1'
execute 'gdxxrw.exe output_ex.gdx par=y rng=x!a3'

在这里,我在一个名为 x 的 sheet 中获得了 x 和 y。但是,问题是索引重复,即索引是在单元格 a3 上重复创建的,所以我有一个单独的行,其中包含 x 和 y 的相同索引。有什么方法可以让索引只在第一行,而后续的行只包含数据,由变量名标识?这将使它在美学上更令人愉悦并且更易于操作。

非常感谢!

您可以在导出之前在 GAMS 中将这两个参数合二为一,如下所示:

Set i      / i1*i4 /
    header / x,y /;
    
Parameter
    x(i)
    y(i)
    xy(i, header);
    
* Fill with random data
x(i) = uniformInt(2,6);
y(i) = uniformInt(4,7);

* Combine in one parameter
xy(i,'x') = x(i);
xy(i,'y') = y(i);

execute_unload "output_ex.gdx" xy;
execute 'gdxxrw.exe output_ex.gdx par=xy rng=xy!a1'