无法重现问题。
下面的完整示例生成一个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);
}
}
}