easyexcel 根据模板生成的Excel,在点击“千位分隔样式”后,单元格格式会被清除

wz8daaqr  于 3个月前  发布在  其他
关注(0)|答案(8)|浏览(108)

涉及代码:

package com.example.javatest.Test;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.example.javatest.java.easyexcel.FillData;
import org.junit.Test;

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

public class ExcelTemplateTest {

    @Test
    public void simpleFill() {
        String templateFileName =
                "D:\\template\\表单信息.xlsx";
        String dest =
                "D:\\template\\表单信息dest.xlsx";
        List<FillData> fillDataList = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            FillData build = FillData.builder().level(i)
                    .billDate(new Date())
                    .billNo("billNO" + i * 24)
                    .fseq(i + "11")
                    .period("期间-" + i)
                    .voucher("凭证-" + i + 5)
                    .billName("单据名-" + (char) i)
                    .materialNo("no-" + i * 25)
                    .materialName("name-" + i * 62)
                    .hasChange(false)
                    .fqty(BigDecimal.valueOf(i * 303.3)).build();
            fillDataList.add(build);
        }
        ExcelWriter excelWriter = EasyExcel.write(dest)
                .withTemplate(templateFileName)
                .build();
        WriteSheet writeSheet = EasyExcel.writerSheet("表单信息").build();

        excelWriter.fill(fillDataList, writeSheet);
        excelWriter.finish();

    }
}

实体类:

package com.example.javatest.java.easyexcel;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.example.javatest.Test.BooleanToStringConvert;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.poi.ss.usermodel.IndexedColors;

import java.math.BigDecimal;
import java.util.Date;

@Data
@EqualsAndHashCode
@Builder
public class FillData {
    private Integer level;
    private Date billDate;
    private String billNo;
    private String fseq;
    private String period;
    private String voucher;
    private String billName;
    private String materialNo;
    private String materialName;
    @NumberFormat("0.00###############")
    private BigDecimal fqty;
    @ExcelProperty(converter = BooleanToStringConvert.class)
    private boolean hasChange;
    @ExcelIgnore
    private IndexedColors color;
}

pom 版本

com.alibaba
easyexcel
3.3.4

导出后现象见下图

ruoxqz4g

ruoxqz4g1#

Hi,麻烦一下对应的模板

hm2xizp9

hm2xizp93#

在excel中,保留两位小数和千分位是两个连续的步骤,没办法拆分处理。(你可以理解为Excel严格遵守规定,每一个步骤都要在上一个步骤的流程下实施。WPS自己做了自动化操作)
如果你要求千分位+保留两位小数,你可以按照以下设置:

@NumberFormat("#,##0.00")
private BigDecimal fqty;
vojdkbi0

vojdkbi04#

我用的不是WPS,这个导出之后,点击千分位那个按钮,就会把格式清除掉,其他列也会有这个问题

sqserrrh

sqserrrh5#

你自己新建一个excel,单独点击按钮,也会清除格式。和easyexcel的使用无关 获取 Outlook for iOS< https://aka.ms/o0ukef >…

________________________________ 发件人: zlsfaith ***@***.***> 发送时间: Wednesday, July 17, 2024 12:04:04 PM 收件人: alibaba/easyexcel ***@***.***> 抄送: Black Pan ***@***.***>; Assign ***@***.***> 主题: Re: [alibaba/easyexcel] 根据模板生成的Excel,在点击“千位分隔样式”后,单元格格式会被清除 (Issue #3888) 我用的不是WPS,这个导出之后,点击千分位那个按钮,就会把格式清除掉,其他列也会有这个问题 ― Reply to this email directly, view it on GitHub<#3888 (comment)>, or unsubscribe< https://github.com/notifications/unsubscribe-auth/ACRXFDTW65UOVBKBN47F7XDZMXULJAVCNFSM6AAAAABK7T46XSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMZSGM2DEMRTGI >. You are receiving this because you were assigned.Message ID: ***@***.***>

c7rzv4ha

c7rzv4ha6#

这个我试验过,自己新建的excel,点击之后,不会清除,之前用的poi导出也是正常的

yuvru6vn

yuvru6vn7#

尝试复现该问题,excel点击后,对应的数xml文件格式缺失。暂不确定问题原因,待排查。

ma8fv8wu

ma8fv8wu8#

好的,希望能够早日破案

相关问题