2012-02-11 2 views
1

Apache-Poi를 처음 사용하고 3.8 버전의 poi를 사용합니다. Excel에서 값을 쓰는 동안, 일치하면 열 이름을 확인하고, 해당 열에 값을 써서 끝내면 다시 헤더에 쓰게됩니다. 문제는 세 개의 열 값을 쓰면 마지막 열 값만 추가 또는 저장되고 처음 두 값은 열에 저장되지 않는다는 것입니다. 아무도 잘못되었는지 말할 수 있습니까? (죄송합니다, 경우에 어떤 실수)쓰는 동안 Excel에 일부 값이 누락되었습니다.

Code: 
      int i = 0; 
     Row row = sheet.createRow(i); 
     CellStyle cellStyle = workbook.createCellStyle(); 
     cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_ORANGE.index); 
     String validate_header = null; 
     while (iterator.hasNext()) { 
      if (eiterator.hasNext()) { 
       validate_header = eiterator.next(); 
      } 
      Cell cell = row.createCell(i); 
      String col_heading = iterator.next(); 
      cell.setCellValue(col_heading); 
      if(col_heading.equalsIgnoreCase("Assigned Date")) 
      { 
       Add_value(i, col_heading, row, sheet); 
       row=sheet.getRow(0); 
       cell=row.getCell(i); 
      } 
      else if(col_heading.startsWith("Review")) 
      { 
       int count=-1; 
       int n=Col_values.get("Defect Summary").size(); 
       for (int j = 0; j < n; j++) { 
          row = sheet.createRow(count); 
        cell = row.createCell(i); 
        String s="External QC Defect ";  
        cell.setCellValue(s); 
        count++; 

       } 
       row=sheet.getRow(0); 
       cell=row.getCell(i); 

      } 

      sheet.autoSizeColumn(i); 
      i++; 

     } 

private static Sheet Add_value(int k,String name,Row row, Sheet sheet) { 

     System.out.println("Inside the add method"); 


     if(name.equalsIgnoreCase("Assigned Date")||name.equalsIgnoreCase("Reported Date")) 
     { 
     vector = Col_values.get("TargetDate"); 
     int count = 1; 

     System.out.println("IF Size of the vector " + vector.size()); 
     for (int j = 0; j < vector.size(); j++) { 

      row = sheet.createRow(count); 
      cell = row.createCell(k); 
      String s = (String) vector.get(j); 
      System.out.println(s); 
      cell.setCellValue(s); 
      count++; 

     } 
     } 
     else 
     { 
     vector = Col_values.get("Defect Summary"); 
      int count = 1; 
    System.out.println("ELSE Size of the vector " + vector.size()); 
     for (int j = 0; j < vector.size(); j++) { 

      row = sheet.createRow(count); 
      cell = row.createCell(k); 
      String s = (String) vector.get(j); 
      System.out.println(s); 
      cell.setCellValue(s); 
      count++; 
     } 
     } 
     return sheet; 

    } 

'

u는 무엇이 잘못되었는지 알 수 있습니까?

+0

코드가와

 row = sheet.createRow(count); 

교체? 우리가 어떻게 당신이 잘못 알고있는가 ??? –

+0

죄송합니다. 나는 지금 추가했다. – Loga

+0

코드를 처음부터 다시 작성하기 만하면됩니다. 너무 많은 열린 끝 (반복자)과 너무 많은 로컬 용도 (createRow 사용)가 있습니다. 또한 Java 규칙 (즉, 여기에 수용)을 따르는 것이 좋습니다. 공백을 더 많이 사용합니다. 'camelCaseNames' i.o. 'Capitalized_underscored_ones'. 특정 목적을 위해 작은 기능으로 하향식 디자인을 사용할 수 있습니다. _ 이유를 이해합니다. 추악한 POI를 사용한 첫 번째 실험. _ –

답변

1

Add_value이 맨 위부터 행을 만들기 시작한 것 같습니다. 따라서 두 x 째 호출에서 이전 행이 제거됩니다.

  row = k == 0 ? sheet.createRow(count) : sheet.getRow(count); 
+0

아니, 그 특정 행에 대한 셀을 만든 후 카운트가 증가되었습니다 보인다. 가로로 세로로 값을 삽입해야합니다. – Loga

+0

그런 식으로 작동하지 않습니다. 개념적으로 시트는 행 []이고 행은 셀 []입니다. 다른 createRows를 주석으로 작성하고 코드를 시험해 볼 수 있습니다. –

+0

나는 이해했다. 나는 나의 문제 인 창조 된 행을 얻기를 위해 행을 또 다시 만들고있다. 고마워, 많이 .. Mr. Joop – Loga

관련 문제