关于:java中poi导出对象到excel中,日期格式属性,后面几行变成数字
导出对象数据到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);
}
效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本