我有一个要求,我需要为给定时期内的所有交易生成报告,我需要相应地应用单元格格式。在这种情况下,单元格格式化不起作用,特别是在工作表中创建32748单元格后的日期。这似乎是API中的错误,如果有人已经遇到此问题并发现任何修复,请提供一些输入。
供参考,以下是示例代码:
public class TestFormat {
public static void main(String args[]){
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Excel Sheet");
HSSFDataFormat format = wb.createDataFormat();
for(int i = 1; i<65535;i++ ) {
HSSFRow row = sheet.createRow(i);
HSSFCell cell = row.createCell(1);
HSSFCellStyle style = wb.createCellStyle();
cell.setCellValue((Date) new Date());
style.setDataFormat(format.getFormat("MM/dd/yyyy HH:mm:ss"));
cell.setCellStyle(style);
}
FileOutputStream fileOut;
fileOut = new FileOutputStream("c:\\test\\excelFile.xls");
wb.write(fileOut);
fileOut.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Data is saved in excel file.");
}
}
答案 0 :(得分:5)
您正在循环中创建单元格样式。不要!
Excel对文件格式允许的单元格样式数有限制。你需要做的是将你的单元格样式的创建/设置移到循环之外,所以它只创建一次,它应该没问题
您的代码的核心部分将类似于:
HSSFDataFormat format = wb.createDataFormat();
HSSFCellStyle style = wb.createCellStyle();
cell.setCellValue((Date) new Date());
style.setDataFormat(format.getFormat("MM/dd/yyyy HH:mm:ss"));
for(int i = 1; i<65535;i++ ) {
HSSFRow row = sheet.createRow(i);
HSSFCell cell = row.createCell(1);
cell.setCellStyle(style);
}