You can start with the below GEL which reads the XSLX file:
<gel:script xmlns:core="jelly:core"
xmlns:gel="jelly:com.niku.union.gel.GELTagLibrary"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="jelly:util">
<!-- ************************************************************************************** -->
<!-- Program: GEL Script for reading XLSX excel file -->
<!-- Action: -->
<!-- Author: Shubham Bhatia -->
<!-- Version: 1.0.0 -->
<!-- Dependencies: Yes, Dependent on the parameter file Location and File Name -->
<!-- ************************************************************************************ -->
<core:catch var="SuperException">
<gel:parameter default="" var="fileLocationOnServer"/> <!-- example: (G:\Apps\Clarity\Clarity)-->
<gel:parameter default="" var="fileName"/><!-- example: (test.xlsx)-->
<core:set var="fullFilePath"><![CDATA[blank]]></core:set>
<gel:log> File Location (${fileLocationOnServer}) </gel:log>
<gel:log> File Name (${fileName}) </gel:log>
<core:set var="fullFilePath"><![CDATA[${fileLocationOnServer}/${fileName}]]></core:set>
<core:new className="java.io.File" var="ExcelFileToRead">
<core:arg value="${fullFilePath}"/>
</core:new>
<gel:log> File Size ${ExcelFileToRead.length()} </gel:log>
<core:new className="java.io.FileInputStream" var="fileInput">
<core:arg type="java.io.File" value="${ExcelFileToRead}"/>
</core:new>
<gel:log> Return first sheet from the XLSX workbook </gel:log>
<core:new className="org.apache.poi.xssf.usermodel.XSSFWorkbook" var="myWorkBook">
<core:arg type="java.io.FileInputStream" value="${fileInput}"/>
</core:new>
<gel:log> Get iterator to all the rows in current sheet </gel:log>
<core:invoke method="getSheetAt" on="${myWorkBook}" var="mySheet">
<core:arg value="${0}"/>
</core:invoke>
<gel:log> Traversing over each row of XLSX file </gel:log>
<core:invoke method="iterator" on="${mySheet}" var="rowIterator"/>
<gel:log>____________________________________________________________</gel:log>
<core:while test="${rowIterator.hasNext()}">
<gel:log> For each row, iterate through each columns </gel:log>
<core:invoke method="next" on="${rowIterator}" var="row"/>
<core:invoke method="cellIterator" on="${row}" var="cellIterator"/>
<core:while test="${cellIterator.hasNext()}">
<core:invoke method="next" on="${cellIterator}" var="cell"/>
<core:switch on="${cell.getCellType()}">
<core:case value="${1}">
<gel:log>${cell.getStringCellValue()} </gel:log>
</core:case>
<core:case value="${0}">
<gel:log>${cell.getNumericCellValue()} </gel:log>
</core:case>
<core:case value="Cell.CELL_TYPE_BOOLEAN">
<gel:log>${cell.getBooleanCellValue()} </gel:log>
</core:case>
<core:default/>
</core:switch>
</core:while>
</core:while>
</core:catch>
<core:if test="${SuperException!=null}">
<gel:log>Super Exception -- ${SuperException}</gel:log>
</core:if>
</gel:script>
Let me know if it works for you, else we can find other way or try to modify the GEL.
/Shubham