美文网首页程序员
poi设置列格式为货币格式

poi设置列格式为货币格式

作者: CXY_XZL | 来源:发表于2022-03-14 17:06 被阅读0次

以下是主要代码

public class CustomWriteHandler extends AbstractCellStyleStrategy {
    @Override
    protected void initCellStyle(Workbook workbook) {
    }

    @Override
    protected void setHeadCellStyle(Cell cell, Head head, Integer integer) {
        
    }

    @Override
    protected void setContentCellStyle(Cell cell, Head head, Integer integer) {
        Workbook workbook = cell.getSheet().getWorkbook();
        int columnIndex = cell.getColumnIndex();
        CellStyle cellStyle = workbook.createCellStyle();
        DataFormat format = workbook.createDataFormat();
        // 在这里,我设置货币格式是以¥开头的且带有2位小数的格式
        cellStyle.setDataFormat(format.getFormat("¥#,##0.00_);[Red](¥#,##0.00)"));
        cellStyle.setAlignment(HorizontalAlignment.LEFT);
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        cell.setCellStyle(cellStyle);
    }
}

上面style的设置是第一步,第二步需要设置成货币格式的列的数据 必须是数字类型 的,因为我的需求是保留两位小数,所以我的货币数据是Double类型的

poi也有自带的格式类型,请看一下代码:

public final class BuiltinFormats {
    public static final int FIRST_USER_DEFINED_FORMAT_INDEX = 164;
    //注意这行代码
    private static final String[] _formats = new String[]{"General", "0", "0.00", "#,##0", "#,##0.00", "\"$\"#,##0_);(\"$\"#,##0)", "\"$\"#,##0_);[Red](\"$\"#,##0)", "\"$\"#,##0.00_);(\"$\"#,##0.00)", "\"$\"#,##0.00_);[Red](\"$\"#,##0.00)", "0%", "0.00%", "0.00E+00", "# ?/?", "# ??/??", "m/d/yy", "d-mmm-yy", "d-mmm", "mmm-yy", "h:mm AM/PM", "h:mm:ss AM/PM", "h:mm", "h:mm:ss", "m/d/yy h:mm", "reserved-0x17", "reserved-0x18", "reserved-0x19", "reserved-0x1A", "reserved-0x1B", "reserved-0x1C", "reserved-0x1D", "reserved-0x1E", "reserved-0x1F", "reserved-0x20", "reserved-0x21", "reserved-0x22", "reserved-0x23", "reserved-0x24", "#,##0_);(#,##0)", "#,##0_);[Red](#,##0)", "#,##0.00_);(#,##0.00)", "#,##0.00_);[Red](#,##0.00)", "_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)", "_(\"$\"* #,##0_);_(\"$\"* (#,##0);_(\"$\"* \"-\"_);_(@_)", "_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)", "_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)", "mm:ss", "[h]:mm:ss", "mm:ss.0", "##0.0E+0", "@"};

    ...
}

poi自己封装的几种类型都在_formats这个数组里了,可以看到在这些类型中也有货币类型的,但默认货币前缀是$,所以,如果我们想以作为货币前缀的时候,就需要修改下它的类型,而我刚才的自定义类型(¥#,##0.00_);[Red](¥#,##0.00))就是简单的将$替换成而已。

如果我们就希望使用$作为货币前缀,那么上面的代码就可以修改下,如下:

public class CustomWriteHandler extends AbstractCellStyleStrategy {
    
    ...

    @Override
    protected void setContentCellStyle(Cell cell, Head head, Integer integer) {
        Workbook workbook = cell.getSheet().getWorkbook();
        int columnIndex = cell.getColumnIndex();
        CellStyle cellStyle = workbook.createCellStyle();
        DataFormat format = workbook.createDataFormat();
        // 修改如下
        cellStyle.setDataFormat(format.getFormat((short)8));
        cellStyle.setAlignment(HorizontalAlignment.LEFT);
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        cell.setCellStyle(cellStyle);
    }
}

8就是数组_formats的下标,对应的值为$#,##0.00_);[Red]($#,##0.00)

相关文章

网友评论

    本文标题:poi设置列格式为货币格式

    本文链接:https://www.haomeiwen.com/subject/vacsdrtx.html