我正在使用Apache POI 3.7而我正在尝试创建一个行,其中一些单元格已经对齐,而其他单元格则居中对齐。
我试过了:
if(isNumeric()){
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
}else{
cellStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT);
}
我也尝试过:
cellStyle.setAlignment((short)0) , cellStyle.setAlignment((short)1) ...
无论如何,当我生成Excel文档时,行中的所有单元格都是左对齐或居中对齐,但不是混合。
我甚至不知道我是否可以做我正在尝试的事情。
谢谢
答案 0 :(得分:3)
所以看起来你有一个单元格样式,并在左对齐和中心对齐之间不断更改它。单元格共享样式,因此如果更改一个单元格的样式,它将更改已分配样式的所有单元格。要获得多个分配,您需要多种样式
Workbook wb = new XSSFWorkbook();
Sheet sh = wb.createSheet("Sheet1");
CellStyle left = wb.createCellStyle();
left.setAlignment(CellStyle.ALIGN_LEFT);
CellStyle center = wb.createCellStyle();
center.setAlignment(CellStyle.ALIGN_CENTER);
Row r1 = sh.createRow(1);
Cell c1 = r1.createCell(1);
c1.setCellStyle(left);
c1.setCellValue("Left justified text");
Cell c2 = r1.createCell(2);
c2.setCellStyle(center);
c2.setCellValue(1234);
Cell c3 = r1.createCell(3);
c3.setCellStyle(left);
c3.setCellValue("More Left Justified Text");
FileOutputStream fileOut = new FileOutputStream("CellAlignTest.xlsx");
wb.write(fileOut);
wb.close();
fileOut.close();
此处还有一个注意事项,您可以使用有限数量的样式,因此如果要创建大型工作表,则必须共享它们。
答案 1 :(得分:1)
根据Cell .setCellStyle(CellStyle样式)方法的javadoc,样式应该是通过调用Workbook上的createCellStyle()方法创建的CellStyle。试试以下内容:
CellStyle centeredStyle = workbook.createCellStyle();
centeredStyle.setAlignment(CellStyle.ALIGN_CENTER);
CellStyle leftStyle = workbook.createCellStyle();
leftStyle.setAlignment(CellStyle.ALIGN_LEFT);
Sheet sheet = workbook.getSheetAt(0);
for(Row row : sheet.rowIterator()) {
for(Cell cell : row.cellIterator()) {
CellStyle cellStyle = (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) ? centeredStyle : leftStyle;
cell.setCellStyle(cellStyle);
}
}