2016-06-01 10 views
1

Ich erstellte eine Excel-Datei und fügte einen neuen Wert in (0,0) [Zeile, Zelle] als Hallo. Zum zweiten Mal habe ich die gleiche Excel-Datei, das gleiche Blatt geöffnet und die gleiche (0,0) Zelle mit einem anderen String-Wert aktualisiert.Aktualisieren Sie den vorhandenen Zellenwert in einer Excel-Datei mit NPOI

Der Code wird erfolgreich ohne Fehler ausgeführt, aber die Datei ist beschädigt und wird nicht geöffnet.

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(); 
       } 
      } 
     } 
    } 
} 

im Debug-Modus, nachdem der zweite Wert eingestellt ist cell.SetCellValue (second); Ich konnte den Wert durch Debug.Print (cell.ToString()); und der Wert wird in der Konsole ausgegeben. Beim Schreiben in die Arbeitsmappe wird die Datei jedoch beschädigt. Führe mich durch die Reichweite.

Antwort

0

ich einen Fehler in anderen Teil gemacht zweite Anweisung ..

Bevor:

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

Jetzt:

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

Ich änderte den Filemode und Fileaccess-Typ und jetzt funktioniert es gut.