2013-11-12 3 views
0

Я пытаюсь экспортировать данные из моего jsp в excel с помощью Apache POI. Число столбцов, которые мне нужны, будет зависеть от двух параметров и, следовательно, я получаю его через запрос.Невозможно динамически установить значение для объекта HSSFCell

Для EX: Если требуется число динамических столбцов = 3, то вывод должен быть примерно таким.

A | B | DH1 | DH2 | DH3 | C 

Здесь A, B, C = колонка статического столбца.

DH = Динамический заголовок столбца (извлекается из запроса.)

Чтобы сделать это, я сначала установить А, В, С, а затем найти DH Кол-во столбцов требуется. то я создаю столбцы DH. После этого я выясню значение, необходимое в каждом столбце DH, сохраните это значение в Arraylist, а затем перейдите к Arraylist и установите значение.

Здесь код

  HSSFCell c1= row.createCell(0); 
      HSSFCell c2= row.createCell(1); 

      HSSFCell cellObject = null; 

      oRecordMetaInfo = getNoofDynamicColumns(); 
      NoofColumns = oRecordMetaInfo.getRecordCount(); 

        for(int i = 2; i < NoofColumns + 2; i++) 
     { 
      cellObject =  row.createCell((int) i); 
     } 

      HSSFCell c3 = row.createCell((int) (NoofColumns + 2)); 


      c1.setCellValue(" A "); 
      c2.setCellValue(" B "); 

     Array1 = new ArrayList(); 

     Array1 = dao.getDynamicColumnValues(); 


    If(Array1.size != 0) 
    { 
     QueryRow oRow = null; 
     Iterator oIt = null; 
     oIt = Array1.iterator(); 

     while (oIt.hasNext()) { 
      oRow = (QueryRow) oIt.next(); 
      oRow.get("DYNAMIC_VALUE"); 

      cellObject.setCellValue(oRow.get("DYNAMIC_VALUE").getString()); 
      } 
     } 

      c3.setCellValue(" C "); 

Но, в outtpu, что я получаю это

A | B | | | DH3 | C 

Поэтому только последнее значение получает значение в ячейке, предыдущее значение не являются. Может ли кто-нибудь предположить, что не так?

ответ

2

Ваша проблема в том, вы создаете 3 DH клетки, но только сохраняя ссылку на последний, и, следовательно, переписав его в 3 раза

Этот бит создает 3 колонки (или сколько для установки):

for(int i = 2; i < NoofColumns + 2; i++) 
    { 
     cellObject =  row.createCell((int) i); 
    } 

Но, как вы видите, сохраняется только последняя. Затем, когда вы делаете:

while (oIt.hasNext()) { 
     oRow = (QueryRow) oIt.next(); 
     oRow.get("DYNAMIC_VALUE"); 

     cellObject.setCellValue(oRow.get("DYNAMIC_VALUE").getString()); 
    } 

Вы держите перезапись ту же последнюю ячейку

Вам нужно изменить логику для извлечения правой ячейки каждый раз, например,

int cellNumber = 2; 
    while (oIt.hasNext()) { 
     oRow = (QueryRow) oIt.next(); 
     oRow.get("DYNAMIC_VALUE"); 

     cellObject = row.getCell(cellNumber); 
     cellObject.setCellValue(oRow.get("DYNAMIC_VALUE").getString()); 
     cellNumber++; 
    } 

С другой стороны, создать ячейки и хранить их в массиве, который вы повторяете параллельно, или что-то в этом роде. Кроме того, подумайте о том, чтобы положить 2 в константу, так как вы ее используете повсюду, и это будет проблемой для обновления, когда вам нужно будет добавить еще один столбец в начале позже ...

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