Excel poi: применить цвет переднего плана к пустым ячейкам - PullRequest
0 голосов
/ 09 декабря 2011

Я хочу использовать 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);
                            }

любой совет, как я могу покрасить пустые ячейки?

1 Ответ

4 голосов
/ 09 декабря 2011

Ваш код не может даже скомпилироваться.

Но причина, по которой вы получаете NullPointerException, заключается в том, что этот код

if (cell != null){
   cell.setCellStyle(whiteFG);
}
else if ( "".equals(cell.getStringCellValue()) ){       
    cell.setCellStyle(whiteFG);
}

Все ячейки, отличные от NULL, войдут в первое условие,поэтому единственная ячейка, которая входит во второе условие - это 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) для извлечения ячеек из строки, этот метод будет возвращать null только когда вы 'повторное редактирование нового файла xls.

...