[alibaba/easyexcel]根据JAVA对象导出Excel模版,请问如何将某个列全部设置为文本格式

2024-05-09 714 views
2

版本:3.0.2 Easy-Excel 3.0.2

问题:根据JAVA对象导出Excel模版,请问如何将某个列全部设置为文本格式, 找了很多文档都没解决,我太菜了求助。现在填写我导出的模版 填写日期会变成2022/10/10 我想填写的时候是 2022-10-10

public class CustomWriteHandler implements CellWriteHandler { @Override public void afterCellDispose(CellWriteHandlerContext context) { final Cell cell = context.getCell(); final CellStyle cellStyle = context.getWriteWorkbookHolder().getWorkbook().createCellStyle(); final DataFormat dataFormat = context.getWriteWorkbookHolder().getWorkbook().createDataFormat(); final short format = dataFormat.getFormat("@"); // 设置为文本 cellStyle.setDataFormat(format); cell.setCellStyle(cellStyle); } }

太难了 找了很多文档都没解决问题 求助。

回答

3

方法1:pojo加个属性,String类型的,自己转好日期格式写进去。原来Date类型的不要写入excel 方法2:自定义converter

9

方法1:pojo加个属性,字符串类型的,自己转好日期格式写。原来日期类型的不要写入excel 方法2:自定义转换器

你这种只是导出数据的时候设置某个row的某个cell吧 ,我是想让整个cell列全部是文本。 查了半天找到一个 public class CellWriteHandler implements SheetWriteHandler {

@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder,
                             WriteSheetHolder writeSheetHolder) {
    SXSSFSheet sxssfSheet = (SXSSFSheet) writeSheetHolder.getSheet();
    final String sheetName = writeSheetHolder.getSheet().getSheetName();
    final Integer cellNumber = ExcelFileDownLoadConfig.getCellNumber(sheetName);
    for (int i = 0; i < cellNumber; i++) {
        final CellStyle cellStyle = writeWorkbookHolder.getCachedWorkbook().createCellStyle();
        cellStyle.setDataFormat((short) 49);
        sxssfSheet.setDefaultColumnStyle(i, cellStyle);
    }
}

不过这里的cell列的个数 需要自己配置

9

@zhangchaoyanggit 我的解决方案是 写一个 RowWriteHandler 在写表头时获取有多少列 然后设置 每列的文本样式


**
 * 自定义行处理器
 *
 * @author LiuYuan
 * @date 2023/06/14 11:00
 */
public class ColumnTextStyleRowWriteHandler implements RowWriteHandler {

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
        if (isHead) {
            // 设置单元格样式为文本
            CellStyle cellStyle = row.getSheet().getWorkbook().createCellStyle();
            DataFormat format = row.getSheet().getWorkbook().createDataFormat();
            cellStyle.setDataFormat(format.getFormat("@"));
            // 获得列的数量
            int columnCount = row.getLastCellNum();
            for (int i = 0; i < columnCount; i++) {
                Sheet sheet = writeSheetHolder.getSheet();
                sheet.setDefaultColumnStyle(i, cellStyle);
            }
        }
    }
}