返回

EasyExcel3.0.5 生成 Excel 时,日期时间类型单元格格式不生效的解决方法

后端

问题

在使用 EasyExcel 3.0.5 将数据导出到 Excel 时,您可能遇到这样的问题:日期时间类型单元格的格式不生效。这意味着当您在 Excel 中打开导出的文件时,日期时间类型的单元格不会显示为预期的格式,例如 "yyyy-MM-dd" 或 "yyyy-MM-dd HH:mm:ss"。

解决方法

要解决此问题,您可以使用以下两种方法之一:

  1. 使用内置样式

EasyExcel 提供了多种内置样式,您可以使用这些样式来格式化日期时间类型单元格。要使用内置样式,请在写入数据之前设置样式。例如:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import org.apache.poi.ss.usermodel.IndexedColors;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class EasyExcelDemo {

    public static void main(String[] args) {
        // 创建一个 Excel 文件并写入数据
        String fileName = "easyexcel-demo.xlsx";
        List<Date> dates = new ArrayList<>();
        dates.add(new Date());
        dates.add(new Date());

        // 创建一个 ExcelWriter 实例
        ExcelWriter excelWriter = EasyExcel.write(fileName).build();

        // 创建一个工作表
        WriteSheet writeSheet = EasyExcel.writerSheet("日期时间类型单元格").build();

        // 设置单元格样式
        writeSheet.getDefaultCellStyle().setDataFormat((short) 21);
        writeSheet.getDefaultCellStyle().setFillForegroundColor(IndexedColors.AQUA.getIndex());

        // 将数据写入 Excel 文件
        excelWriter.write(dates, writeSheet);

        // 关闭 ExcelWriter
        excelWriter.finish();
    }
}

在上面的代码中,我们使用 getDefaultCellStyle() 方法来设置单元格样式。我们可以通过 setDataFormat() 方法来设置日期时间类型的单元格格式。例如,(short) 21 表示使用 "yyyy-MM-dd" 的格式。

  1. 自定义样式

如果您需要更复杂的单元格格式,您可以自定义单元格样式。要自定义单元格样式,请在写入数据之前创建一个样式对象。例如:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.CellStyle;
import com.alibaba.excel.write.style.Style;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class EasyExcelDemo {

    public static void main(String[] args) {
        // 创建一个 Excel 文件并写入数据
        String fileName = "easyexcel-demo.xlsx";
        List<Date> dates = new ArrayList<>();
        dates.add(new Date());
        dates.add(new Date());

        // 创建一个 ExcelWriter 实例
        ExcelWriter excelWriter = EasyExcel.write(fileName).build();

        // 创建一个工作表
        WriteSheet writeSheet = EasyExcel.writerSheet("日期时间类型单元格").build();

        // 创建一个样式对象
        CellStyle cellStyle = new CellStyle();
        cellStyle.setDataFormat((short) 21);
        cellStyle.setFillForegroundColor(IndexedColors.AQUA.getIndex());
        Font font = cellStyle.getFont();
        font.setBold(true);
        font.setColor(IndexedColors.WHITE.getIndex());

        // 将样式应用到工作表
        Style style = new Style();
        style.setHeadCellStyle(cellStyle);
        writeSheet.setStyle(style);

        // 将数据写入 Excel 文件
        excelWriter.write(dates, writeSheet);

        // 关闭 ExcelWriter
        excelWriter.finish();
    }
}

在上面的代码中,我们创建一个 CellStyle 对象来定义单元格样式。然后,我们将样式应用到 Style 对象,并将其应用到工作表。这样,当我们写入数据时,单元格将使用自定义的样式。

总结

通过使用内置样式或自定义样式,您可以轻松地将日期时间类型单元格格式应用到生成的 Excel 表格中。这将使您的数据更易读和理解。