多个样式到Excel单元格POI
我想将颜色应用于单元格以及格式化单元格值(例如日期,金额)。但是当我应用两个单元格样式时,只有最后一个样式应用于单元格。
//before this colourCellStyle and dateCellStyle are the formatting style cell9 = row.createCell(9); cell9.setCellValue(getLoadDate()); cell9.setCellStyle(colourCellStyle); cell9.setCellStyle(dateCellStyle);
多个单元格样式不能应用于单个Cell
。 应用的最后一个单元格样式将覆盖单元格上任何预先存在的单元格样式。 设置多个CellStyle
不会合并每个样式的设置属性。
解决方案是创建另一个CellStyle
,它具有其他CellStyle
的所需属性。 您可以使用cloneStyleFrom
方法从一个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
。
您可以创建样式的地图,然后您可以在整个Java程序中使用不同的样式。
例如
Map cellStyles = new HashMap(); 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 multipleCellStyles = createMultipleExcelCellStyles(workbook); headerCellD1.setCellStyle(multipleCellStyles.get("header_cell_style")); cellB.setCellStyle(multipleCellStyles.get("normal_cell_style")); cellC.setCellStyle(multipleCellStyles.get("date_cell_style"));
- 如何在为doc文件使用POI时解决NoSuchMethodError
- 如何使用Apache POI XSSF创建从右到左对齐的工作表
- Java:使用apache POI如何将ms word文件转换为pdf?
- 使用Apache POI更新.docx文件的页眉
- 使用APACHE添加链接文件POI XSSF不接受目录地址并显示java.net.URISyntaxException
- 使用poi-ooxml jar文件创建.docx文件
- 如何使用Java获得具有已定义宽度的多行富文本字段(任何字体,任何字体大小)所需的高度?
- Apache-POI:无法写入现有工作簿
- 使用Apache POI生成Excel下拉列表时的限制