У меня возникают проблемы при попытке открыть мой файл Apache POI excel, который состоит из большого объема данных (600 000/700 000 строк), который передает три сводные диаграммы, сгенерированные на трех разных листах (с использованием потоковой передачи SXSSFWorkbook).
Когда я пытаюсь открыть созданный Excel di MSExcel, появляется следующее сообщение: «Excel не может выполнить это действие с помощью доступных ресурсов Excel ... попробуйте закрыть что-то ...».
Итак, чтобы сэкономить ресурсы, я попытался разделить кеш между первыми двумя точками: ОК! Лучше!
Но когда я пытаюсь разделить кеш даже с третьим, MSExcel выдает мне ошибки и пытается восстановить, но с ошибочными результатами.
Есть ли решение для совместного использования кэша с более чем двумя сводными точками с одним и тем же источником данных? Или я что-то не так делаю?
Вот код:
XSSFWorkbook wb = new XSSFWorkbook();
XSSFPivotTable firstPivot = preparefirstPivot(...);
XSSFPivotTable secondPivot = preparesecondPivot(...);
XSSFPivotTable thirdPivot = preparethirdPivot(...);
/* START: shared cache */
/* I remove from workbook all PivotCaches except the firstPivot one */
long firstPivotCacheId = firstPivot.getCTPivotTableDefinition().getCacheId();
List<CTPivotCache> ctPivotCacheList = wb.getCTWorkbook().getPivotCaches().getPivotCacheList();
for (int i = 0; i < ctPivotCacheList.size(); i++) {
CTPivotCache ctPivotCache = ctPivotCacheList.get(i);
if(ctPivotCache.getCacheId() != firstPivotChaceId ) {
wb.getCTWorkbook().getPivotCaches().removePivotCache(i);
}
}
/* I share the firstPivot cache with the other pivots */
/* work! OK! */
secondPivot.getCTPivotTableDefinition().setCacheId(firstPivotCacheId);
secondPivot.setPivotCache(firstPivot.getPivotCache());
/* here does not work! why?!??!! */
thirdPivot.getCTPivotTableDefinition().setCacheId(firstPivotCacheId);
thirdPivot.setPivotCache(firstPivot.getPivotCache());
Что-то не так?
Большое спасибо !!!