2016-03-22 7 views
2

Excelのシートの2番目のタブにデータを追加すると、最初のタブデータは表示されません。 2番目のタブのコードを削除すると、最初のタブデータが表示されます。JavaでExcelにデータを書き込む最初のタブのデータが第2のタブを書き込んでいるときに表示されない

HSSFSheet sheet1 = wb.createSheet("A "); 
HSSFSheet sheet2 = wb.createSheet("B"); 

HSSFFont headerFont = wb.createFont(); 
headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD); 

headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
headerStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); 
headerStyle.setFillBackgroundColor(HSSFColor.WHITE.index); 
headerStyle.setFont(headerFont); 
try 
{ 
     FileOutputStream fileOut = new FileOutputStream("C:\\Report.xls"); 

     HSSFRow sessionname = sheet1.createRow(0); 
     HSSFCell title = sessionname.createCell(0); 
     title.setCellStyle(headerStyle); 
     title.setCellValue("Supported cipher Report"); 

     HSSFRow row = sheet1.createRow(5); 

     HSSFCell cell0 = row.createCell(0); 
     cell0.setCellStyle(headerStyle); 
     cell0.setCellValue("One"); 

     HSSFCell cell1 = row.createCell(1); 
     cell1.setCellStyle(headerStyle); 
     cell1.setCellValue("two"); 

     HSSFCell cell2 = row.createCell(2); 
     cell2.setCellStyle(headerStyle); 
     cell2.setCellValue("three"); 

     HSSFCell cell3 = row.createCell(3); 
     cell3.setCellStyle(headerStyle); 
     cell3.setCellValue("four"); 

     HSSFCell cell4 = row.createCell(4); 
     cell4.setCellStyle(headerStyle); 
     cell4.setCellValue("five"); 


     if (!list.isEmpty()) 
     { 
      int rowNumber = 6; 
      for (Result s : supportedlist) 
      { 
       HSSFRow nextrow = sheet1.createRow(rowNumber); 
       nextrow.createCell(0).setCellValue(s.One()); 
       nextrow.createCell(1).setCellValue(s.Two()); 
       nextrow.createCell(2).setCellValue(s.Three()); 
       nextrow.createCell(3).setCellValue(s.four()); 
       nextrow.createCell(4).setCellValue(s.five()); 
       rowNumber++; 
      } 
     } 
     sheet1.autoSizeColumn(0); 
     sheet1.autoSizeColumn(1); 
     sheet1.autoSizeColumn(2); 
     sheet1.autoSizeColumn(3); 
     sheet1.autoSizeColumn(4); 
     System.out.println("sheet1 writting"); 

    wb.write(fileOut); 
    fileOut.flush(); 
    fileOut.close(); 

私がシート2を通過し、残りのコードが上記と同じ場合。sheet1データが表示されている間、sheet1タブのデータは表示されません。

+1

あなたは 'sheet2'に書き込むことはありません。誤って間違ったタブに書き込んだり、最初の文字を上書きしたりする可能性はありますか?あなたのコードをデバッグしましたか? – Thomas

+0

私はまた、コードをデバッグします。私はデバッグ中に値をチェックしました。もし私がsheet2を渡す前に出力を参照してください。データはそこにあります。一度sheet2が渡されると、データは消滅します。お願いします。 FileOutputStreamに問題はありますか? FileOutputStreamを使用する場合はfileOut = new FileOutputStream( "C:\\ Report.xls"、true); - >すべての時間データが表示されます。 sheet2データは表示されません。 – sudhanshu

答えて

0

sheet1に書き込んだ後、sheet1の値をsheet2に変更していると思います。さて、あなたのコードに従って何が起こるかは、あなたが再びファイルを作成/書き出していることです。したがって、古いファイルとデータをreplacesとし、2番目のシートに新しいファイルに書き込みます。あなたは何をすべき

FileOutputStream fileOut = new FileOutputStream("C:\\Report.xls"); 

プログラム秒の時間を実行したときに行の下

は、データが上書きされsheet2に書き込んでいるときに、ファイルが存在するかどうかは、をチェックする必要があります。存在する場合は、既存のExcelファイルに新しいシートを追加します。存在しない場合は、新しいファイルを作成し、シートを作成します。

下の既存のファイルの使用に上書きされないようにするには、この

FileOutputStream fileOut = new FileOutputStream(file); 

    if (file.exists()) { 
     try { 
      workbook = (HSSFWorkbook)WorkbookFactory.create(file); 
     } catch (InvalidFormatException e) { 
      e.printStackTrace(); 
     } 
     HSSFSheet sheet = workbook.createSheet("Sample sheet2"); 
    } 
    else{ 
     workbook = new HSSFWorkbook(); 
     HSSFSheet sheet = workbook.createSheet("Sample sheet1"); 
    } 
    workbook.write(fileOut); 
    fileOut.close(); 

ような何かを行います。これにより、既存のファイルにデータが追加されます。

FileOutputStream fileOut = new FileOutputStream("C:\\Report.xls", true); 
+0

これは私も同様だと思っていますが、追加情報がなくても伝えるのは難しいです。それに加えて、xlsxファイル(最後の行)には、ファイルに別のヘッダーを書き込むか、またはファイル形式を混乱させる可能性が高いため、追加しません。 – Thomas

0

問題は2つのインスタンス[new createExcel(one);新しいcreateExcel(2);その関数を呼び出します。 wbはインスタンスの一部であるためです。シート1とシート2で新しいExcelを作成しました。今回はsheet2データのみを書きました。シート2のデータだけが表示されていました。ご支援ありがとうございます。

関連する問題