多个样式到Excel单元格POI

时间:2015-09-24 11:11:41

标签: java apache-poi

我想将颜色应用于单元格以及格式化单元格值(例如日期,金额)。但是当我应用两个单元格样式时,只有最后一个样式应用于单元格。

//before this colourCellStyle and dateCellStyle are the formatting style
cell9 = row.createCell(9);
cell9.setCellValue(getLoadDate());
cell9.setCellStyle(colourCellStyle);
cell9.setCellStyle(dateCellStyle);

2 个答案:

答案 0 :(得分:5)

多个单元格样式无法应用于单个Cell。应用的最后一个单元格样式将覆盖Cell上任何预先存在的单元格样式。设置多个CellStyle并不会合并每种样式的设置属性。

解决方案是创建另一个CellStyle,其中包含其他CellStyle的所需属性。您可以使用the cloneStyleFrom method开始使用一个CellStyle的属性。

CellStyle combined = workbook.createCellStyle();
combined.cloneStyleFrom(colourCellStyle);
combined.setDataFormat(dateCellStyle.getDataFormat());
// You can copy other attributes to "combined" here if desired.

cell9.setCellStyle(combined);

此技术可以推广用于克隆任何现有的单元格样式,并从第二个现有单元格样式中复制单个属性。与往常一样,重用任何现有的CellStyle,但如果需要不同的属性组合,则必须创建并使用新的CellStyle

答案 1 :(得分:1)

您可以创建样式地图,然后在整个Java程序中使用不同的样式。

例如

Map<String, CellStyle> cellStyles = new HashMap<String, CellStyle>();
DataFormat dataFormat = workbook.createDataFormat();

XSSFCellStyle cellStyle;
XSSFFont font;

cellStyle = workbook.createCellStyle();

cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
cellStyle.setAlignment(cellStyle.ALIGN_CENTER_SELECTION);   
font = workbook.createFont();
font.setFontHeightInPoints((short)16);
font.setFontName("Calibri");                                            
cellStyle.setFont(font);
cellStyles.put("header_cell_style", cellStyle);

cellStyle = workbook.createCellStyle(); 
cellStyle.setAlignment(cellStyle.ALIGN_CENTER_SELECTION);
font = workbook.createFont();
font.setFontHeightInPoints((short)12);
font.setFontName("Calibri");                   
cellStyle.setFont(font);
cellStyles.put("normal_cell_style", cellStyle);

cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(cellStyle.ALIGN_CENTER_SELECTION);       
cellStyle.setDataFormat(dataFormat.getFormat("dd-mmm-yyyy"));
font = workbook.createFont();
font.setFontHeightInPoints((short)12);
font.setFontName("Calibri");                   
cellStyle.setFont(font);
cellStyles.put("date_cell_style", cellStyle);

cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(cellStyle.ALIGN_CENTER_SELECTION);       
cellStyle.setDataFormat(dataFormat.getFormat("dd-mmm-yyyy"));
font = workbook.createFont();
font.setFontHeightInPoints((short)16);
font.setFontName("Calibri");                   
cellStyle.setFont(font);
cellStyles.put("header_date_cell_style", cellStyle);

return cellStyles;       

然后使用此地图

Map<String, CellStyle> multipleCellStyles = createMultipleExcelCellStyles(workbook);

headerCellD1.setCellStyle(multipleCellStyles.get("header_cell_style"));

cellB.setCellStyle(multipleCellStyles.get("normal_cell_style"));

cellC.setCellStyle(multipleCellStyles.get("date_cell_style"));