Вы получаете ArrayIndexOutOfBoundException для массива values
, потому что вы используете row.getPhysicalNumberOfCells()
для определения его размера. Но row.getPhysicalNumberOfCells()
будет считать только те ячейки, которые фактически заполнены в файле.
Например, если вы создаете лист Excel и заполняете только столбцы A, C и F и вообще не касаетесь других ячеек row.getPhysicalNumberOfCells()
вернет 3.
Но вы перебираете все ячейки, получая row.getFirstCellNum()
и row.getLastCellNum()
. Так что values[iCurrent]
обязательно выйдет за пределы, как только вы достигнете ячейки F.
Относительно проблемы OutOfMemory:
XSSF использует много памяти. Попробуйте перенести виртуальную машину на максимально возможное количество памяти для вашей машины. Или, если вы просто читаете файлы, попробуйте использовать API eventmodel
вместо usermodel
(например, SAX vs. DOM).