Почему рабочая книга SXSSF (Apache POI) создает большие размеры xlsx, чем Excel?
Я разработал класс Java для использования книги SXSSF для преодоления ошибки кучи Java, которая всегда вызывается книгой XSSF при написании очень больших электронных таблиц. См. http://poi.apache.org/spreadsheet/how-to.html для решения.
Короче я использую workbook = new SXSSFWorkbook(SXSSFWorkbook.DEFAULT_WINDOW_SIZE);
вместо workbook = new XSSFWorkbook();
Это решение работает как по волшебству, и теперь я могу писать очень большие электронные таблицы xlsx с гораздо меньшим объемом памяти.
Однако есть одна проблема, с которой я застрял. При использовании рабочей книги SXSSF она фактически генерирует больший размер файла xlsx по сравнению с самим Excel. Например, SXSSF создает 33 МБ, а Excel создает 25 МБ с тем же набором данных. Зачем?
Я исследовал и нашел причину:
Я изменил имя расширения.xlsx на.zip, чтобы открыть его и просмотреть файл листа \xl\worksheets\sheet1.xml. Я обнаружил встроенные строки, используя t="inlineStr"
создаются SXSSF, в то время как таблица общих строк с использованием t="s" (тег v) создается в Excel. Я проверил XSSF также создает таблицу общих строк. Наличие t="inlineStr" в каждой ячейке огромной электронной таблицы увеличивает размер файла быстрее.
Мой вопрос, возможно ли заставить рабочую книгу SXSSF сгенерировать sheet1.xml
файл, основанный на таблице общих строк (с использованием тегов v - t="s"), а не на встроенных строках (t="inlineStr")? Я надеюсь, что это решение значительно уменьшит окончательный размер файла. Кто-нибудь знает?