Я видел, как разработчики столкнулись с этой проблемой несколько лет назад. Я изучил множество форумов и официальных документов POI. Тем не менее, я пока не нашел ответа. Итак, проблема в том, что я пробовал следующие два фрагмента:
Workbook wb = WorkbookFactory.create(new File("spreadsheet.xlsx"));
и
File file = new File("C:\\spreadsheet.xlsx");
OPCPackage opcPackage = OPCPackage.open(file.getAbsolutePath());
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
и любой из подходов занимает около 5-6 минут (если приложению не хватает памяти) для обработки простого и довольно небольшого файла электронной таблицы.xlsx (200 КБ).
Что мне нужно сделать, чтобы исправить это? (Я использую Apache POI 3.9)
/*****************************/
Процесс занимает много времени в следующем месте:
public class XSSFSheet extends POIXMLDocumentPart implements Sheet{
...
protected void read(InputStream is) throws IOException {
try {
-->>> worksheet = WorksheetDocument.Factory.parse(is).getWorksheet();
} catch (XmlException e){
throw new POIXMLException(e);
}
}
...
Я не могу отлаживать дальше. VisualVM также говорит то же самое..!
xlsx
файлов с более чем 30 тысячами строк и более чем 100 столбцами менее чем за несколько секунд. Я понятия не имею, как это может быть так медленно для вас. Я бы посоветовал вам попробовать профилировать с помощью VisualVM и посмотреть, что делает его таким медленным. - person Jonathan Drapeau   schedule 27.02.2014