excel表头国际化(easyexcel)

模型



/**
 * (渠道商-无规格分组字段)导入新增商品Excel模板对象
 * @author czc
 * @date 2023-04-10 16:44
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class AddChannelSkuNotGroupModel extends ExcelBaseModel {

    static final String bigTitle = "PMS.EXCEL.BIGTITLE";

    /**
     * 平台一级类目
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.ONE.CATEGORY.INSTRUCTION1", "PMS.EXCEL.ONE.CATEGORY.INSTRUCTION2"})
    @ColumnWidth(value = 24)
    private String oneCategory;
    /**
     * 平台二级类目
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.TWO.CATEGORY.INSTRUCTION1", "PMS.EXCEL.TWO.CATEGORY.INSTRUCTION2"})
    @ColumnWidth(value = 24)
    private String twoCategory;
    /**
     * 平台三级类目
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.THREE.CATEGORY.INSTRUCTION1", "PMS.EXCEL.THREE.CATEGORY.INSTRUCTION2"})
    @ColumnWidth(value = 24)
    private String threeCategory;
    /**
     * 平台四级类目
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.FOUR.CATEGORY.INSTRUCTION1", "PMS.EXCEL.FOUR.CATEGORY.INSTRUCTION2"})
    @ColumnWidth(value = 24)
    private String fourCategory;
    /**
     * 自定义一级类目
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.ONE.CUSTOMIZE.CATEGORY.INSTRUCTION1", "PMS.EXCEL.ONE.CUSTOMIZE.CATEGORY.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String oneCustomizeCategory;
    /**
     * 自定义二级类目
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.TWO.CUSTOMIZE.CATEGORY.INSTRUCTION1", "PMS.EXCEL.TWO.CUSTOMIZE.CATEGORY.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String twoCustomizeCategory;
    /**
     * 商品名称
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.NAME.INSTRUCTION1", "PMS.EXCEL.NAME.INSTRUCTION2"})
    @ColumnWidth(value = 40)
    private String name;

    /**
     * SKU编码
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.SKU.CODE.INSTRUCTION1", "PMS.EXCEL.SKU.CODE.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String skuCode;
    /**
     * 商品品牌
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.BRAND.NAME.INSTRUCTION1", "PMS.EXCEL.BRAND.NAME.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    @DropDownField(fieldName = DropDownFieldConstant.BRAND_FIELD)
    private String brandName;
    /**
     * 规格名1
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.SPEC.ONE.INSTRUCTION1", "PMS.EXCEL.SPEC.ONE.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String specOne;
    /**
     * 规格值1
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.SPEC.ONE.VALUE.INSTRUCTION1", "PMS.EXCEL.SPEC.ONE.VALUE.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String specOneValue;
    /**
     * 规格名2
     */
    @ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SPEC.TWO.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String specTwo;
    /**
     * 规格值2
     */
    @ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SPEC.TWO.VALUE.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String specTwoValue;
    /**
     * 规格名3
     */
    @ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SPEC.THREE.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String specThree;
    /**
     * 规格值3
     */
    @ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SPEC.THREE.VALUE.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String specThreeValue;
    /**
     * 商品单位
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.UNIT.INSTRUCTION1", "PMS.EXCEL.UNIT.INSTRUCTION2"})
    @ColumnWidth(value = 10)
    @DropDownField(fieldName = DropDownFieldConstant.UNIT_FIELD)
    private String unit;
    /**
     * 最小销售单元
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.SALE.GROUP.INSTRUCTION1", "PMS.EXCEL.SALE.GROUP.INSTRUCTION2"})
    @ColumnWidth(value = 15)
    private String saleGroup;
    /**
     * 单位换算模板编号
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.UNIT.TEMPLATE.NUMBER.INSTRUCTION1", "PMS.EXCEL.UNIT.TEMPLATE.NUMBER.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String unitTemplateNumber;
    /**
     * 所属供应商
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.SUPPLIER.NAME.INSTRUCTION1", "PMS.EXCEL.SUPPLIER.NAME.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    @DropDownField(fieldName = DropDownFieldConstant.SUPPLIER_FIELD)
    private String supplierName;
    /**
     * 供应商型号
     */
    @ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SUPPLIER.MODEL.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String supplierModel;
    /**
     * 条形码
     */
    @ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.BAR.CODE.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String barCode;
    /**
     * 零售价
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.MARKET.PRICE.INSTRUCTION1", "PMS.EXCEL.MARKET.PRICE.INSTRUCTION2"})
    @ColumnWidth(value = 15)
    private String marketPrice;
    /**
     * 成本价
     */
    @ExcelProperty(value = {bigTitle, "PMS.EXCEL.COST.PRICE.INSTRUCTION1", "PMS.EXCEL.COST.PRICE.INSTRUCTION2"})
    @ColumnWidth(value = 15)
    private String costPrice;
    /**
     * ERP-SKU编码
     */
    @ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.ERP.SKU.CODE.INSTRUCTION2"})
    @ColumnWidth(value = 20)
    private String erpSkuCode;

}

拦截器

@RequiredArgsConstructor
public class I18nCellWriteHandler implements CellWriteHandler {

    @Resource
    private MessageSource messageSource;



    @Override
    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
        // 仅处理表头
        if (!isHead || head == null) {
            return;
        }

        // 获取原始表头名称列表
        List<String> originHeadNames = head.getHeadNameList();
        if (CollectionUtils.isEmpty(originHeadNames)) {
            return;
        }

        // 仅在预计算阶段执行国际化逻辑
        if (relativeRowIndex == 0) { // relativeRowIndex == 0 表示预计算阶段
            List<String> i18nHeadNames = originHeadNames.stream()
                    .map(code ->{
                                if (StringUtils.isNotBlank(code)){
                                    return MessageUtil.getMessage(code);
                                }
                                return code;
                            }
                            ) // 缓存结果
                    .collect(Collectors.toList());

            // 替换表头名称
            head.setHeadNameList(i18nHeadNames);
        }
    }


    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {

    }

    @Override
    public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {

    }

    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {

    }
}

简单使用

EasyExcel.write(response.getOutputStream(), head)
    // 注册拦截器
   .registerWriteHandler(new I18nCellWriteHandler())
   .sheet(sheetName).doWrite(data);

在`EasyExcel`中,如果你需要实现Excel表头国际化,即支持多种语言展示不同的列标题(也称作列名),你可以利用Java的`ResourceBundle`来管理多语言资源。`ResourceBundle`允许你将文本字符串存储在单独的文件中,方便管理和切换语言。 步骤如下: 1. **创建Resource Bundle**: - 创建一个或多个`.properties`文件,比如`messages_en.properties`(英文)、`messages_zh.properties`(中文)。在这些文件中,键(Key)对应表头名称,值(Value)就是翻译后的文字。例如: ```properties column.title.product_name=Product Name column.title.price=Price ``` 2. **注入Resource Bundle**: 在你的应用启动时,加载相应的资源包并注入到需要使用的类中。`EasyExcel`本身不会自动处理国际化,你需要手动管理这部分工作。这里假设你有一个`ExcelUtil`工具类: ```java private static final ResourceBundle messages; static { messages = ResourceBundle.getBundle("messages", Locale.getDefault()); } ``` 3. **使用Resource Bundle获取表头**: 当读取Excel时,当你需要显示表头,可以从`ResourceBundle`中获取对应的值: ```java String productNameTitle = messages.getString("column.title.product_name"); String priceTitle = messages.getString("column.title.price"); ``` 4. **动态设置表头**: 在`EasyExcel`的`SheetListener`或`HeaderWrapper`中,可以在读取开始前设置表头: ```java List<String> header = new ArrayList<>(); header.add(productNameTitle); header.add(priceTitle); // 然后传给EasyExcel实例 sheet.setHead(header); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉普兰德做的到吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值