2016-06-01 12 views
1

Excelファイルを作成し、新しい値をHelloとして(0,0)[行、セル]に挿入しました。 2回目は、同じExcelファイルと同じシートを開き、同じ(0,0)セルを別の文字列値で更新しました。NPOIを使用してExcelファイルの既存のセル値を更新します

コードは正常に実行されていますが、ファイルは破損していて開けません。デバッグモードで

CODE

namespace PractiseProject 
{ 
    public static class ExcelNPOI 
    { 
     static IWorkbook workbook; 
     static ISheet sheet; 
     static IRow row; 
     static ICell cell; 
     static string file = "C:/Users/MSTEMP/Documents/Files/Test.xlsx"; 
     static string sheetName = "Testcase"; 

     public static void createExcel() 
     { 
      string firstValue = "Hello"; 
      if (!File.Exists(file)) 
      { 
       using (FileStream str = new FileStream(file, FileMode.Create, FileAccess.Write)) 
       { 
        workbook = new XSSFWorkbook(); 
        sheet = workbook.CreateSheet(sheetName); 
        row = sheet.CreateRow(0); 
        cell = row.CreateCell(0); 
        cell.SetCellValue(firstValue); 
        workbook.Write(str); 
        str.Close(); 
       } 
      } 
      else 
      { 
       using (FileStream rstr = new FileStream(file, FileMode.Open, FileAccess.Read)) 
       { 
        workbook = new XSSFWorkbook(rstr); 
        sheet = workbook.GetSheet(sheetName); 

        using (FileStream wstr = new FileStream(file, FileMode.Open, FileAccess.ReadWrite)) 
        { 
         string secondValue = "changes"; 

         row = sheet.GetRow(0); 
         cell = row.GetCell(0); 
         cell.SetCellValue(secondValue); 
         Debug.Print(cell.ToString()); 
         workbook.Write(wstr); 
         wstr.Close(); 
        } 
        rstr.Close(); 
       } 
      } 
     } 
    } 
} 

、第2の値がcell.SetCellValue(secondValue)に設定された後。私はで値を見ることができましたDebug.Print(cell.ToString());と値がコンソールに表示されます。しかし、ブックに書き込むときにファイルが壊れてしまいます。私は手を差し伸べる。私は2番目の文を使用して、他の部分でミスを犯した

答えて

0

..

前に:今

using (FileStream wstr = new FileStream(file, FileMode.Open, FileAccess.ReadWrite)) 

:私はにFileModeとFileAccessの種類を変更し

using (FileStream wstr = new FileStream(file, FileMode.Create, FileAccess.Write)) 

と今それは正常に動作しています。

関連する問題