导出对象数据到excel中,发现从45行开始,日期数据变成了天数,
代码:
public static void writeExcel(List list,File file)throws Exception{
//反射获取list中对象类型
Class cla = list.get(0).getClass();
//创建book
HSSFWorkbook book = new HSSFWorkbook();
//创建sheet
HSSFSheet sheet = book.createSheet(cla.getSimpleName());
//创建第一行,即标题行
HSSFRow row1 = sheet.createRow(0);
//给标题行的每个单元格写入标题
Field[] fields = cla.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
String fieldName = fields[i].getName();
HSSFCell celli = row1.createCell(i);
celli.setCellValue(fieldName);
}
//创建数据行
for (int i = 0; i < list.size(); i++) {
HSSFRow rowi1 = sheet.createRow(i+1);
//创建行内单元格
for (int j = 0; j < fields.length; j++) {
HSSFCell cellij = rowi1.createCell(j);
//给单元格设置内容
fields[j].setAccessible(true);
Object fieldValue = fields[j].get(list.get(i));
//对日期进行格式转换
if (fields[j].getType()==Date.class) {
//指定单元格数据格式是日期
// CellStyle styleDate=book.createCellStyle();
// styleDate.setDataFormat(book.createDataFormat().getFormat("yyyy年MM月dd日"));
cellij.setCellStyle(styleDate);
cellij.setCellValue((Date)fieldValue);
}else{
cellij.setCellValue(fieldValue+"");
}
}
}
//把内存的book写到目的文件中
book.write(file);
}
效果:
网上查询找出问题,CellStyle styleDate=book.createCellStyle();此代码创建的CellStyle对象太多,导致导出的文件出现问题,
解决方案:将代码
CellStyle styleDate=book.createCellStyle();
styleDate.setDataFormat(book.createDataFormat().getFormat("yyyy年MM月dd日"));
移动到循环外,只创建一个,多次使用,即可解决问题
public static void writeExcel(List list,File file)throws Exception{
//反射获取list中对象类型
Class cla = list.get(0).getClass();
//创建book
HSSFWorkbook book = new HSSFWorkbook();
//创建sheet
HSSFSheet sheet = book.createSheet(cla.getSimpleName());
//创建第一行,即标题行
HSSFRow row1 = sheet.createRow(0);
//给标题行的每个单元格写入标题
Field[] fields = cla.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
String fieldName = fields[i].getName();
HSSFCell celli = row1.createCell(i);
celli.setCellValue(fieldName);
}
//创建日期的数据格式,只创建一个,在下面循环中多次使用,因为多次循环创建,导致创建过多,无法使用
CellStyle styleDate=book.createCellStyle();
styleDate.setDataFormat(book.createDataFormat().getFormat("yyyy年MM月dd日"));
//创建数据行
for (int i = 0; i < list.size(); i++) {
HSSFRow rowi1 = sheet.createRow(i+1);
//创建行内单元格
for (int j = 0; j < fields.length; j++) {
HSSFCell cellij = rowi1.createCell(j);
//给单元格设置内容
fields[j].setAccessible(true);
Object fieldValue = fields[j].get(list.get(i));
//对日期进行格式转换
if (fields[j].getType()==Date.class) {
//指定单元格数据格式是日期
// CellStyle styleDate=book.createCellStyle();
// styleDate.setDataFormat(book.createDataFormat().getFormat("yyyy年MM月dd日"));
cellij.setCellStyle(styleDate);
cellij.setCellValue((Date)fieldValue);
}else{
cellij.setCellValue(fieldValue+"");
}
}
}
//把内存的book写到目的文件中
book.write(file);
}
效果: