GAMS で gdxxwr を利用し,結果を excel ファイルに出力することがよくありますが、gdxxwr で excel に出力するにはその excel ファイルが閉じていないといけないです。ただ、GAMS を実行するたびにいちいち excel ファイルを閉じるのは面倒なのですが、以下のページに自動で「excel ファイルを閉じる→excel ファイルに出力する→excelファイルを開く」という動作をさせるためのコードがのっています。
Yet Another Math Programming Consultant: Writing Excel files in GAMS
上のページに載っているサンプルのコードは少しわかりにくく、しかも実行可能なものではないので、少し修正したサンプルをつくりました。
結構、便利だと思います。
$title 既に開いている excel ファイルに結果を出力するためのコード display "com: 既に開いている excel ファイルに結果を出力するためのコード"; $ontext Time-stamp: <2011-10-15 19:08:15 Shiro Takeda> First-written: <2011/10/15> ・GAMS で gdxxwr を利用し,結果を excel ファイルに出力することがよくある. ・ただし,gdxxwr で excel に出力するには excel ファイルが閉じていないといけない. ・既に開いている excel ファイルを一度閉じて,結果を export し,再び開くというプ ログラム. $offtext set i Sample index / 1*100 / j Sample index / 1*20 /; parameter a Sample parameter; a(i,j) = uniform(0,1); display a; * results.xls が開いていたら,一度閉じる. $call =xlstalk.exe -C results.xls * cmd.txt に以下の内容を出力. $onecho > cmd.txt i=results.gdx o=results.xls par=a rng=foo!A1 rdim=1 cdim=1 $offecho * a を results.gdx に出力: execute_unload "results.gdx", a; * cmd.txt の中身を引数として,gdxxwr.exe を実行する. @filename は * filename というファイルの中身を引数とするということ.また,= 付きでコマン * ドを呼び出すのは,コマンドが終了するまで待ってから次に進むということ. execute '=gdxxrw @cmd.txt'; * results.xls を再び開く. shellexecute file は,file に関連付けられたアプ * リケーションを自動で選択し開くということ. execute 'shellexecute "results.xls"'; * -------------------- * Local Variables: * mode: gams * fill-column: 80 * End: