2016-03-22 2 views
1

Я пытаюсь создать ячейку, присвоить ей ранее существовавший стиль и установить значение для этой ячейки. Это может быть достигнуто, как правило, используя следующие 3 строки кода:Apache POI - Создание ячейки, установка значения ячейки и стиля ячейки в одной команде

HSSFRow row = sheetBenefits.createRow(rowNoPB+i); 
HSSFCell cell0 = row.createCell(1); 
cell0.setCellStyle(style); 
cell0.setCellValue(new String("Survey "+i)); 

Однако создание клеток и присвоения значения могут быть сведены к одной строке следующим образом:

row.createCell(1).setCellValue(new String("Survey "+i)); 

Я не возможность задать стиль в этой линии:

row.createCell(1).setCellValue(new String("Survey"+i)).setCellStyle(style); 

ошибка это дает мне «не может ссылаться на setCellValue (String) на примитивном типе пустот». Какая ошибка в этом случае? Как я могу достичь всех трех целей в одной строке кода?

ответ

1

Метод row.createCell возвращает объект типа HSSFCell, поэтому вы можете вызвать на нем еще один метод. Что вы делаете, вызывая метод setCellValue.

Но этот метод возвращает void - он ничего не возвращает. Поэтому вы не можете ссылаться на другие методы.

Что еще хуже, вы не сохранили результат row.createCell в любом месте, поэтому вы потеряли ссылку, которую вы создали. Вам нужно будет вернуть его снова из row, или, что лучше, вам нужно сохранить его в (локальной) переменной в первую очередь.

Что вы ищете - это «жидкостный интерфейс», как это реализовано StringBuilder или другими строителями. Однако Apache POI не разработан с жидкостным интерфейсом, поэтому вы не можете этого сделать.

Вам нужно будет перейти к первому фрагменту кода, который вы написали.

+0

Отлично! Большое спасибо! –

1

возвратного типа The setCellValue метода является void, поэтому он не является действительным поставить метод setCellStyle после вызова setCellValue.

С другой стороны, вы можете подумать о том, чтобы написать статический метод для выполнения этой работы для вас.

public static Cell addCell(Row row, int columnIndex, CellStyle cellStyle, String value) 
{ 
    Cell cell = row.createCell(columnIndex); 
    cell.setStyle(cellStyle); 
    cell.setValue(value); 
    return cell; 
} 

Чтобы добавить ячейку просто вызвать статический метод:

addCell(row, 1, cellStyle, "Hell World"); 
Смежные вопросы