Невозможно воспроизвести проблему.
Следующий полный пример приводит к тому, что книга Excel
имеет рабочий лист и правильную форматированную дату в ячейке B2
.
Код:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
class CreateExcelDate {
public static void main(String[] args) throws Exception {
try (Workbook workbook = new HSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("./Excel.xls") ) {
CellStyle cStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
cStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
Sheet excelSheet = workbook.createSheet();
Row dataRow = excelSheet.createRow(1);;
Cell dataCell = dataRow.createCell(1);;
dataCell.setCellValue(new java.util.Date());
dataCell.setCellStyle(cStyle);
excelSheet.setColumnWidth(1, 25 * 256);
workbook.write(fileout);
}
}
}
Результат:
Из вашего комментария выясняется, что ваш вопрос не показывает целое. Для строк есть цикл, и для каждой строки должна быть создана дата. И это работает только до 42-й строки.
Хорошо, эта проблема хорошо известна. Excel
имеет ограничение на количество стилей ячеек на рабочую книгу. См. Спецификации и ограничения Excel .
Итак, если вы снова и снова создаете новый стиль ячейки в цикле, этот предел иногда достигается. Однако не всегда нужно создавать новые стили ячеек в цикле. Стили ячеек хранятся на уровне рабочей книги. Просто создайте любой необходимый стиль ячейки, находясь вне цикла. Затем примените только ранее созданные стили ячейки к ячейке в цикле.
Следующее работает для меня и создает 1000 правильных форматированных дат:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
class CreateExcelDate {
public static void main(String[] args) throws Exception {
try (Workbook workbook = new HSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("./Excel.xls") ) {
CellStyle cStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
cStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
Sheet excelSheet = workbook.createSheet();
for (int r = 1; r < 1000; r++) {
Row dataRow = excelSheet.createRow(r);;
Cell dataCell = dataRow.createCell(1);;
dataCell.setCellValue(new java.util.GregorianCalendar(2019, 9, r));
dataCell.setCellStyle(cStyle);
}
excelSheet.setColumnWidth(1, 25 * 256);
workbook.write(fileout);
}
}
}