2015-11-20 3 views
4

В моем Java классе я заявляю клетку, как:Создание новой ячейки, копирование стиля предыдущей ячейки в Apache POI ..?

HSSFCell cell = null; 

И я использую эту ячейку во многих местах, чтобы создать ячейку и установить значение, стили. Например:

cell = row.createCell(1);    
cell.setCellValue("1234.00"); 
setCellStyle(currency, cell, workbook); 

cell = row.createCell(2);    
setCellValue("2445.00"); 

Теперь удивительно, что формат данных первой ячейки применяется к 2-й ячейке. У кого-нибудь есть идеи? Я ожидаю, что стиль второй ячейки будет никем. И стиль 1-й ячейки должен быть с форматом данных, применяемым методом setCellStyle(). Но на самом деле я получаю оба значения ячейки с форматом данных, применяемым методом setCellStyle(). Метод

setCellStyle():

public void setCellStyle(String currency, HSSFCell cell, HSSFWorkbook workbook){ 

     HSSFCellStyle cellStyle = cell.getCellStyle();//I am using cell.getStyle() because the default cell style is not null for a HSSFCell 

     HSSFDataFormat dataFormat = workbook.createDataFormat(); 

     if("GBP".equalsIgnoreCase(currency)){ 
      cellStyle.setDataFormat(dataFormat.getFormat("[$£-809]#,##0_);[Red]([$£-809]#,##0)"));     
     }else(){ 
      cellStyle.setDataFormat(dataFormat.getFormat("$#,##0_);[Red]($#,##0)")); 
     } 
} 
+2

В HSSFRow нет метода 'createCell (String)'. – rgettman

+0

@rgettman моя ошибка, отредактировано –

+0

Что такое 'CUSTOM_STYLE_WITH_DATA_FORMAT'? Вы проверили формат данных в Excel с помощью Format -> Format Cells? – rgettman

ответ

4

Теперь, когда вы обновили свой пост, чтобы показать свой метод setCellStyle, я вижу проблему. Каждый Cell начинается со стандартного CellStyle, и все они имеют одинаковый по умолчанию CellStyle. Когда вы вызываете setCellStyle для первого Cell, вы меняете это значение по умолчанию CellStyle, которое доступно для всех сот. Это означает, что любые другие созданные вами ячейки, в которых вы не устанавливаете CellStyle, имеют свои изменения. Кроме того, в любой другой момент, когда вы вызываете свой собственный setCellStyle, он снова изменит стиль ячейки по умолчанию.

Вместо этого создайте новый CellStyle, который будет иметь только Cell, используя Workbook's createCellStyle method.

HSSFCellStyle cellStyle = workbook.createCellStyle(); 

Если вы собираетесь установить несколько ячеек в том же стиле ячейки, то вы должны reuse the CellStyle objects.

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

+0

У меня есть файл отчета excel со многими листами в нем, каждый лист содержит слишком много строк и столбцов. И типы данных столбцов различны и нуждаются в множестве стилей (числовые столбцы, которые необходимо отформатировать в разных форматах, значения валюты, которые должны быть отформатированы в соответствии с названием валюты, некоторые строки выделены жирным шрифтом, а некоторые не выделены жирным шрифтом, некоторые имеют цвет фона , некоторые должны быть курсивом и т. д.). Я делаю так, как вы сказали в ответ. Но я пытаюсь применить общие вещи, например формат данных, используя общий метод. –

+0

Итак, если у меня есть 20 столбцов на листе, с 5 различными типами строк, и каждая ячейка в строке должна быть отформатирована в соответствии с типом строки, единственным решением, которое я имею до сих пор, является создание каждого требуемого стиля отдельно и использовать. Интересно, так это то, как мы имеем дело с apache poi? –

+1

Это будет работать до тех пор, пока вы не столкнетесь с лимитом книги по количеству стилей ячеек.Но я создал множество электронных таблиц со сложным стилем ячеек в Apache POI, и хотя может быть проще просто повторно создать стиль ячейки по мере необходимости, даже если он дублирует тот, который вы уже создали, все же лучше создать стилей ячейки один раз, перед любой обработкой, а затем обращаться к ним по мере необходимости. – rgettman

Смежные вопросы