Hutool Excel导出 这是单元格为保留5位小数数值格式

一、需求背景

        在MySQL数据中使用decimal类型存储的字段,小数保留了5位

        Java实体类中也是用的BigDecimal类型,

                         

        使用Hutool的Excel导出后,显示是都被默认显示两位小数了,实际业务中偶尔需要显示3-4位,虽然可以通过Excel手动调整一下,但是业务部门还是想在此节省人工成本,于是抛给我了这个需求。

                         

二、代码及操作

        Hutool excel关于style的资料实在是不好找(获取我途径不对吧),经过一番资料查找,如下方法切实解决了问题,于此分享一下。

        1.思路:

        我们首先需要获取数值类型单元格的style格式 ,然后将数值格式设置保留5位小数的格式,在把新格式赋到单元格中。

        2.代码:

    /**
     * 导出excel数据
     */
    @RequestMapping("/batch/exportGoodsPlan")
    @ResponseBody
    public void exportGoodsPlan(HttpServletResponse response, @RequestParam List<String> billNos) throws Exception {
        List<exportGoodsPlanDTO> exportList = cyyBillService.exportGoodsPlan(billNos);
        String responseHeader = "attachment;filename=";
        responseHeader += new String("导出数据.xlsx".getBytes(), "ISO-8859-1");

        BigExcelWriter writer = (BigExcelWriter) ExcelUtil.getBigWriter();
        writer.addHeaderAlias("no","提单号");
        writer.addHeaderAlias("name","名称");
        writer.addHeaderAlias("boxesNum","箱数");
        writer.addHeaderAlias("cubicNum","方数");
        writer.addHeaderAlias("weight","重量");
        writer.addHeaderAlias("num","票数");
        writer.addHeaderAlias("itemNum","产品件数");
        writer.addHeaderAlias("price","金额");
        writer.addHeaderAlias("voyageNo","航班号");

        writer.setColumnWidth(-1, 16); // 设置统一列宽20
        // writer.autoSizeColumnAll(); // 设置自动宽度

        writer.write(exportList);
        StyleSet style = writer.getStyleSet(); //获取整个Excel的样式
        style.setBorder(BorderStyle.THIN, IndexedColors.BLACK1);
        style.setAlign(HorizontalAlignment.CENTER, VerticalAlignment.CENTER); //水平左对齐,垂直中间对齐

        DataFormat dataFormat = writer.getWorkbook().createDataFormat();
        // number type
        CellStyle numberCellStyle = style.getCellStyleForNumber(); //获取单元格的数值样式
        numberCellStyle.setDataFormat(dataFormat.getFormat("0.00000")); //设置为5位小数样式
        for (int i = 1; i < exportList.size()+1; i++) {
            writer.setStyle(numberCellStyle, 3 , i ); // 设置单元格的样式
            writer.setStyle(numberCellStyle, 4 , i ); // 设置单元格的样式
            writer.setStyle(numberCellStyle, 6 , i ); // 设置单元格的样式
            writer.setStyle(numberCellStyle, 7 , i ); // 设置单元格的样式
        }

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setHeader("Content-Disposition", responseHeader);
        // response.setHeader("Content-Disposition", "attachment;filename=exportData.xlsx");
        response.setHeader("Set-Cookie", "fileDownload=true; path=/");
        ServletOutputStream out = response.getOutputStream();

        writer.flush(out, true);
        writer.close();
        IoUtil.close(out);
    }

         3.核心代码为:

StyleSet style = writer.getStyleSet();
CellStyle numberCellStyle = style.getCellStyleForNumber();
numberCellStyle.setDataFormat(dataFormat.getFormat("0.00000"));
writer.setStyle(numberCellStyle, 5 , 5 ); // 设置[5,5]单元格的样式

以上   希望能帮助到同样困惑的朋友!

看完觉得还可以  多多点赞收藏关注哟!3Q!

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
使用HutoolExcelUtil工具类可以很方便地导出Excel文件并合并单元格。 首先,需要引入HutoolExcelUtil类: ```java import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.hutool.poi.excel.cell.CellUtil; ``` 然后,创建一个ExcelWriter对象: ```java ExcelWriter writer = ExcelUtil.getWriter("output.xlsx"); ``` 接下来,可以设置表头和数据内容: ```java // 设置表头 writer.merge(0, "这是一个合并的单元格"); writer.writeHeadRow(Arrays.asList("姓名", "年龄", "性别")); // 设置数据 List<List<Object>> rows = new ArrayList<>(); rows.add(Arrays.asList("张三", 20, "男")); rows.add(Arrays.asList("李四", 25, "女")); rows.add(Arrays.asList("王五", 30, "男")); writer.write(rows); ``` 在设置表头时,使用`merge`方法合并单元格。该方法的第一个参数是要合并单元格的行号,第二个参数是要合并单元格的内容。 最后,需要关闭ExcelWriter对象: ```java writer.close(); ``` 完整示例代码如下: ```java import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.hutool.poi.excel.cell.CellUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ExcelExportDemo { public static void main(String[] args) { // 创建ExcelWriter对象 ExcelWriter writer = ExcelUtil.getWriter("output.xlsx"); // 设置表头 writer.merge(0, "这是一个合并的单元格"); writer.writeHeadRow(Arrays.asList("姓名", "年龄", "性别")); // 设置数据 List<List<Object>> rows = new ArrayList<>(); rows.add(Arrays.asList("张三", 20, "男")); rows.add(Arrays.asList("李四", 25, "女")); rows.add(Arrays.asList("王五", 30, "男")); writer.write(rows); // 关闭ExcelWriter对象 writer.close(); } } ``` 执行以上代码,就可以在当前目录下生成一个名为`output.xlsx`的Excel文件,并且第一行的单元格被合并了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值