一、需求背景
在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!