2012-02-11 18 views
1

私はApache-Poiを初めて使用し、3.8バージョンのpoiを使用しています。 Excelで値を書いている間、私はそれらが一致した場合、私は列の名前を確認し、私はその列にいくつかの値を書き込み、それを終了し、再び私はヘッダーに書き始めます。問題は、3つの列の値を書き込むと、最後の列の値だけが追加または保存され、最初の2つの値が列に保存されないということです。誰が何がうまくいかないかを教えてくれる? (申し訳ありませんが、ケース内の任意のミス)書き込み中に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が上から行を作成し始めているようです。したがって、2番目の呼び出しで古い行が削除されます。

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

いいえ、その特定の行のセルを作成した後にカウントが増えたようです。私は水平方向に垂直でない値を挿入する必要があります。 – Loga

+0

これは機能しません。概念的には、シートは行[]であり、行はセル[]である。あなたは他のcreateRowsをコメントアウトして自分のコードを試してみることができます。 –

+0

私は理解している..私は行を何度も何度も作成しているが、私の問題である作成された行を得るために..ありがとう、たくさん。Joop – Loga

関連する問題