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'
我正在将数据从 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'