Не удается воспроизвести проблему.
Следующий полный пример приводит к рабочей книге 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);
}
}
}
person
Axel Richter
schedule
24.10.2019
String
? Формат данных, который вы определили, явно не работает. Может быть, установить стиль ячейки, прежде чем писать в ячейку, я думаю, стоит попробовать. - person deHaar   schedule 24.10.2019FileOutputStream
(см. ответ ниже), но в противном случае дата генерируется в Excel по вашему запросу (с использованием предоставленногоdateformat
). Используете ли вы не-Microsoft Excel (например, OpenOffice, LibreOffice и т. д.?) - person Ambro-r   schedule 24.10.201906-08-2018
, с последним годом, то почему вы указали такой шаблон, какyyyy-MM-dd
, с первым годом? - person Andreas   schedule 24.10.2019