我想使用poi将我的excel文件的所有单元格设置为某种颜色。但是,我继续为空白单元格获取nullpointer异常。这就是我到目前为止所做的:
HSSFWorkbook workBook = new HSSFWorkbook();
HSSFCellStyle whiteFG = workBook.createCellStyle();
whiteFG.setFillForegroundColor(HSSFColor.AQUA.index);
whiteFG.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
//each row has 20 columns
int numColumns = 20;
for (int colNum = 0 ; colNum < numColumns ; colNum++){
HSSFCell cell = row.getCell((short)colNum);
if (cell != null){
cell.setCellStyle(whiteFG);
}
else if ( "".equals(cell.getStringCellValue()) ){
cell.setCellStyle(whiteFG);
}
else () {
cell.setCellStyle(whiteFG);
}
关于我如何为空白细胞着色的任何建议?
答案 0 :(得分:4)
您的代码甚至无法编译。
但是你获得NullPointerException
的原因是因为这段代码
if (cell != null){
cell.setCellStyle(whiteFG);
}
else if ( "".equals(cell.getStringCellValue()) ){
cell.setCellStyle(whiteFG);
}
所有非空单元格都将进入第一个条件,因此进入第二个条件的唯一单元格为null
。
* 更新:回答评论*
我假设您要创建一个带有彩色单元格的新xls文件。但是,您的代码错过了一个点 - 新创建的Workbook
剂量不包含任何工作表/行/单元格,您必须自己创建一个。
这是我写的一个例子。
HSSFWorkbook workBook = new HSSFWorkbook();
HSSFCellStyle style = workBook.createCellStyle();
style.setFillForegroundColor(HSSFColor.BROWN.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
HSSFSheet sheet = workBook.createSheet();
int numRow = 20;
int numCol = 20;
for (int rowIndex = 0; rowIndex < numRow; rowIndex++) {
HSSFRow row = sheet.createRow(rowIndex);
for (int colIndex = 0; colIndex < numCol; colIndex++) {
HSSFCell cell = row.createCell(colIndex);
cell.setCellStyle(brownBG);
}
}
FileOutputStream fos = new FileOutputStream("test.xls");
workBook.write(fos);
fos.flush();
fos.close();
System.out.println("done");
您编写的代码使用getCell(index)
从一行中检索单元格,此方法只会在您编辑新的xls文件时返回null
。