Я предполагаю, что здесь может быть проблема с HSSFCellStyle, не могли бы вы перейти на CellStyle и один раз проверить, нет ли каких-либо изменений в форматировании:
CellStyle style=null;
XSSFFont defaultFont= wb.createFont();
defaultFont.setFontHeightInPoints((short)10);
defaultFont.setFontName("Arial");
defaultFont.setColor(IndexedColors.BLACK.getIndex());
defaultFont.setBold(false);
defaultFont.setItalic(false);
XSSFFont font= wb.createFont();
font.setFontHeightInPoints((short)10);
font.setFontName("Arial");
font.setColor(IndexedColors.WHITE.getIndex());
font.setBold(true);
font.setItalic(false);
style=row.getRowStyle();
style.setFillBackgroundColor(IndexedColors.DARK_BLUE.getIndex());
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
style.setAlignment(CellStyle.ALIGN_CENTER);
style.setFont(font);
Ключевые моменты, которые следует иметь в виду:
Давайте разберемся с основным различием между HSSFWorkbook и XSSFWorkbook
HSSFWorkbook : в этом классе есть методы для чтения и записи файлов Microsoft Excel в формате .xls.
XSSFWorkbook : в этом классе есть методы для чтения и записи MicrosoftXML-файлы Excel и OpenOffice в формате .xls или .xlsx.
SXSSF : это API-совместимое потоковое расширение XSSF, которое используется при работе с очень большими электронными таблицамидолжны быть произведены, и пространство кучи ограничено
Workbook
Это супер-интерфейс всех классов, которые создают илиподдерживать книги Excel.Он принадлежит к пакету org.apache.poi.ss.usermodel, и оба вышеупомянутых XSSF
, HSSF
и SXSSF
являются реализациями WORKBOOK
Следовательно,Я бы посоветовал до тех пор, пока, если не будет крайней необходимости, т. е. вам нужна определенная функция для xlsx или xls, просто перейдите к реализации рабочей книги
Большинство изменений в стилях - пробные и пробные,Вам нужно продолжать копаться итерациями, чтобы, наконец, найти то, что вам нужно.
Предложения:
Если вы кодируете только HSSF через HSSFWorkbook, выможет работать только с файлами .xls.Я бы посоветовал вам использовать обычные везде, где это возможно (workbook
)
Ваш код загрузки должен выглядеть примерно так:
Workbook wb = WorkbookFactory.create(new File("test.xls"));
Sheet s = wb.getSheetAt(0);
....
Теперь он автоматически определит типфайл и вернуть вам рабочий объект для .xls или .xlsx в зависимости от того, что он находит.Кроме того, везде, где это возможно, старайтесь, чтобы стилизация и дизайн деталей были общими и независимыми от версии.Таким образом, один и тот же код может быть повторно использован для обоих форматов.
Если вам нужна какая-то особая функция, которая требует либо XSSF
, либо HSSF
и не может использовать только Workbook
затем выполните проверку для type
, сначала так:
Workbook wb = WorkbookFactory.create(myExcelFile);
Then you can check the exact type created by the factory:
if (wb instanceof HSSFWorkbook) {
// do whatever
} else if (wb instanceof SXSSFWorkbook) {
// do whatever
} else if (wb instanceof XSSFWorkbook) {
// do whatever
}