最近项目需要做Excel的导入导出功能,用的是原生的POI导出。
说正事。
千位符样式:
// 设置单元格样式
XSSFCellStyle cellStyle =wb.createCellStyle();
XSSFDataFormat format= wb.createDataFormat();
cellStyle.setDataFormat(format.getFormat("#,##0.00")); // 千位符
row.createCell(0).setCellValue(sheetOnelist.get(i).getChargeAmount()==null? 0.00:Double.parseDouble(sheetOnelist.get(i).getChargeAmount()));
row.getCell(0).setCellStyle(cellStyle);// 设置金额样式 千位符
这里需要注意,设置千位符样式时,setCellValue里的值一定要转为double类型,否则导出的Excel样式还是文本样式,需要双击才会改变样式。
小数样式:
cellStyle.setDataFormat(format.getFormat("#0.00")); // 小数
百分比
cellStyle.setDataFormat(format.getFormat("0.00%")); // 百分比
contentCell.setCellValue(Double.parseDouble(data.split("%")[0])/100);
百分数设置单元格数值时需要把原来数据转换为"96%"的字符串,然后把%去掉,转为double除以100 。
需要注意的事项
一般我们导出的excel 里会有小数和百分比参杂的。我们需要创建两个样式来接收格式。
// 设置文本单元格样式
XSSFCellStyle contextstyle =wb.createCellStyle();
XSSFCellStyle contextstyle1 =wb.createCellStyle();
if (isNum && !isPercent) { // 判断是数值但不是百分数
XSSFDataFormat df = wb.createDataFormat(); // 此处设置数据格式
contextstyle.setDataFormat(df.getFormat("#0.00"));//保留两位小数点
// 设置单元格格式
contentCell.setCellStyle(contextstyle);
// 设置单元格内容为double类型
contentCell.setCellValue(Double.parseDouble(data));
}else if(isPercent){ //是百分数
XSSFDataFormat dataFormat = wb.createDataFormat(); // 此处设置数据格式
contextstyle1.setDataFormat(dataFormat.getFormat("0.00%"));
contentCell.setCellStyle(contextstyle1);
contentCell.setCellValue(Double.parseDouble(data.split("%")[0])/100);
}
这里创建了两个contextstyle,如果为一个的话,小数样式会转变为百分比样式。具体原因没有找到。有懂得大佬,欢迎留言讨论。
如有帮助,留个赞呗!!鞠躬。