#apache-poi #xlsx #xls
#apache-poi #xlsx #xls
Вопрос:
Я использую SXSSFWorkbook для потоковой передачи большого объема данных (~ 990 тыс. записей), которые должны быть записаны в файл XLS. Проблема со следующим кодом заключается в том, что он развертывается на сервере Linux. На моем локальном компьютере (win 10 x64) работает так, как ожидалось. Версия Apache POI — 4.1.2.
Workbook wb = new SXSSFWorkbook(SXSSFWorkbook.DEFAULT_WINDOW_SIZE);
Sheet sheet = wb.createSheet(); <-- NPE
Вот фрагмент журнала
at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:273)
at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117)
at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:82)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:684)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:676)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:88)
at com.odfl.altair.controller.MyController.selectAll(MyController.java:211)
Как вы можете видеть в MyController в строке 211, у меня есть вызов метода createSheet(). Я пробовал createSheet() и createSheet(«Имя листа»).
Спасибо
Комментарии:
1. У вас все шрифты установлены в linux box? Похоже, что это может привести к сбою при попытке определить ширину столбцов на основе используемого шрифта
2. Вы правы. Я установил шрифты и теперь работает! Спасибо!
Ответ №1:
У меня была такая же проблема в моем контейнере docker на основе alpaine (там нет обязательных шрифтов). Миграция на образ на основе ubuntu устранила проблему.
для контейнера на основе alpaine вам следует добавить некоторые шрифты и библиотеки в ваш Dockerfile. У меня это сработало с:
apk add curl bash wget fontconfig ttf-dejavu freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev freetype-dev libjpeg-turbo-dev libpng-dev
Комментарии:
1. Помощь в будущих поисках Google здесь: это Alpine Linux. Я столкнулся с той же проблемой в контейнере Docker. Решаемая путем установки fontconfig и ttf-dejavu через «apk add».
2. Не могли бы вы подробнее рассказать о том, как добавить эту строку в Dockerfile?