<!-- Creating the input item for the operation and passing it in --><arc:set attr="excel.file" value="C:\Temp\movies.xlsx" /><arc:call op="excelOpen" in="excel" out="result" > <!-- Resolving the handle from excelOpen to use in excelGet --> <arc:set attr="get.handle" value="[result.handle]" /> <arc:set attr="get.sheet" value="film" /> <arc:set attr="get.version" value="2007" /> <arc:set attr="get.map:favoritemovie" value="A2" /> <arc:set attr="get.map:favoritemovieyear" value="B2" /> <!-- Calling excelGet inside excelOpen to use the handle --> <arc:call op="excelGet" in="get" out="out"> <!-- Creating some output data and file from the data read from the excel sheet --> <arc:set attr="output.data" value="My favorite movie is [out.favoritemovie] and it came out in [out.favoritemovieyear]." /> <arc:set attr="output.filename" value="results.txt" /> <!-- Using the arc:finally keyword to execute the closing of the handle last --> <arc:finally> <!-- Calling excelClose to close the handle --> <arc:call op="excelClose" in="excel" out="close"> <!-- Check to ensure the handle was closed and throw an error if it was not --> <arc:exists attr="close.success" > <arc:else> <arc:throw code="CloseFailed" desc="The handle was not closed successfully." /> </arc:else> </arc:exists> </arc:call> </arc:finally> </arc:call></arc:call><!-- Push the output item out as a file --><arc:push item="output" />