$title 'Simple Connect Example for Excel' (CONNECT05,SEQ=148) $onText This model uses GAMS Connect to read and write to Excel. On Windows with installed Excel the output sheets are merged back into the input workbook. Contributor: Michael Bussieck, September 2022 $offText set i / i1*i3 /; alias (i,j,k); table a(i,j) 'original matrix' i1 i2 i3 i1 1 2 3 i2 1 3 4 i3 1 4 3 ; $onEmbeddedCode Connect: - GAMSReader: symbols: - name: a - ExcelWriter: file: input.xlsx symbols: - name: a $offEmbeddedCode $onMultiR $clear i a $onEmbeddedCode Connect: - ExcelReader: file: input.xlsx symbols: - name: a - Projection: name: a(i,j) newName: i(i) asSet: True - GAMSWriter: symbols: all duplicateRecords: first $offEmbeddedCode i a parameter inva(i,j) 'inverse of a' chk(i,j) 'check the product a * inva' ; executeTool.checkErrorLevel 'linalg.invert i a inva'; * Symbol inva has been loaded implicitly by executeTool.checkErrorLevel. The compiler * instruction in the next line supresses errors about presumably unassigned symbols $onImplicitAssign embeddedCode Connect: - GAMSReader: symbols: - name: inva - ExcelWriter: file: output.xlsx symbols: - name: inva endEmbeddedCode Scalar mergedRead /0/; executeTool 'win32.msappavail Excel'; mergedRead$(errorLevel=0) = 1; if (mergedRead, executeTool.checkErrorLevel 'win32.excelMerge output.xlsx input.xlsx'; embeddedCode Connect: - ExcelReader: file: input.xlsx symbols: - name: a - name: inva - GAMSWriter: symbols: all endEmbeddedCode a inva else embeddedCode Connect: - ExcelReader: file: input.xlsx symbols: - name: a - ExcelReader: file: output.xlsx symbols: - name: inva - GAMSWriter: symbols: all endEmbeddedCode a inva ); chk(i,j) = sum{k, a(i,k)*inva(k,j)}; chk(i,j) = round(chk(i,j),15); display a,inva,chk; chk(i,i) = chk(i,i) - 1; abort$[card(chk)] 'a * ainv <> identity';