poi导出excel⽂件单元格设置:数值(BigDecimal),⽇期
poi导出excel⽂件单元格设置:数值(BigDecimal),⽇期。今天主要是分享⼀下我在开发中解决类似问题的解法,也在⽹上看过⼤家的⽅法作为参考,下⾯写的不对的地⽅,欢迎⼤家指出,可以⼀起讨论。
⽇期格式单元格
private static CellStyle getDateCellStyle (Workbook wb){
//设置⽇期数据样式
CellStyle dataStyle =getCellStyle(wb);
DataFormat dataFormat = wb.getCreationHelper().createDataFormat();
short date = Format("yyyy-MM-dd");
dataStyle.setDataFormat(date);
return dataStyle;
}
数值类型
private static CellStyle getNumberCellStyle (Workbook wb) {
//设置数值数据样式
CellStyle dataStyle = getCellStyle(wb);bigdecimal格式化两位小数
DataFormat dataFormat = wb.getCreationHelper().createDataFormat();//保留两位⼩数点;
short number = Format("#,##0.00");
dataStyle.setDataFormat(number);
return dataStyle;
}
设置默认类型
private static CellStyle getCellStyle (Workbook wb) {
//设置数据样式
final CellStyle dataStyle = wb.createCellStyle();// 设置⾃动换⾏
dataStyle.setWrapText(false);//创建⼀个上下居中格式
dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//左右居中
dataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置边框
dataStyle.setBottomBorderColor(HSSFColor.BLACK.index);
dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
return dataStyle;
}
写合计⾏,最后⼀⾏进⾏合计
对excel的第8,13列数据进⾏求和然后把数据统计后放在最后⼀⾏合计中。XXXBigDecimal为第8⾏的数据和,SSSBigDecimal为第13⾏的数据和。
Row endRow = ateRow(dataList.size()+2);
for(int i =0, rows = dataList.size(); i < rows; i++){
List<Object> data = (i);
for(int j =0, colNum = data.size(); j < colNum; j++){
Cell endcell= ateCell(j);
endcell.setCellStyle(dataStyle);
if(j==0){
endcell.setCellValue("合计:");
}
endcell.setCellStyle(numStyle);
if(j==8){
endcell.setCellValue(XXXBigDecimal.doubleValue());
}
if(j==13){
endcell.setCellValue(SSSBigDecimal.doubleValue());
}
}
}
通过类型判断加⼊数据
// 创建单元格,并设置值
//默认样式
final CellStyle defaultStyle=getCellStyle(wb);
//⽇期格式样式
final  CellStyle dateStyle=getDateCellStyle(wb);
//数值格式样式
final  CellStyle numStyle=getNumberCellStyle(wb);
//理赔⾦额总计
BigDecimal XXXBigDecimal=new BigDecimal(0);
//结案⾦额总计
BigDecimal SSSBigDecimal=new BigDecimal(0);
for(int i =0, rows = dataList.size(); i < rows; i++){
final Row dataRow = ateRow(i +2);
List<Object> data = (i);
for(int j =0, colNum = data.size(); j < colNum; j++){
final  Cell ateCell(j);
Object (j);
if(dateObj instanceof Date){
datacell.setCellStyle(dateStyle);
datacell.setCellValue((Date)dateObj);
}else if(dateObj instanceof BigDecimal){
datacell.setCellStyle(numStyle);
datacell.setCellValue(((BigDecimal) dateObj).doubleValue());
}else{
datacell.setCellStyle(defaultStyle);
datacell.String());
}
}
//进⾏⾦额计算
XXXBigDecimal=XXXBigDecimal.add(((8)); SSSBigDecimal=SSSBigDecimal.add(((13));
}