2016-12-02 2 views
0

Ich habe ein Regex-Muster erstellt, das alle #REF in meiner Excel-Datei findet. Ich habe eine foreach Schleife erstellt, um alle #REF zurückzugeben und sie in der Konsole zusammen mit einer Anzahl von ihnen siplay. Das funktioniert gut. Allerdings habe ich dann eine foreach Schleife erstellt, um alle #REF Referenzen zu entfernen, aber es entfernt nur jedes Mal, wenn ich das Projekt ausführen. Ich habe dies debuggt und nachdem Regex die Übereinstimmung einmal in der if-Anweisung findet, überspringt es das nächste Mal, wenn es in die foreach eintritt, die if-Anweisung, als ob es keine andere Übereinstimmung finden könnte. Ich bin mir nicht sicher, warum diesForeach-Schleife mit Regex, um XML-Muster zu finden

ist

Mein Code als

-Code Bricht ist alles zurück der BEZUG

 using (var spreadsheet = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(@"C:\Users\Craig\Desktop\newTest.xlsx", true)) 
     { 

      var workbook = spreadsheet.WorkbookPart; 
      Workbook w = new Workbook(); 
      var names = workbook.Workbook.DefinedNames; 
      var work = workbook.Workbook; 






      System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"#REF"); 

      int count = result.InactiveNamedRangeCount = names.Count(n => regex.IsMatch(n.InnerText)); 
      Console.WriteLine(count); 
      foreach (var name in names) 
      { 
       if (regex.IsMatch(name.InnerText)) 
       { 
        Console.WriteLine(name.InnerText); 
       } 
      } 

Codewerte jeden #REF Wert

  foreach (var name in names) 
      { 

       if (regex.IsMatch(name.InnerText)) 
       { 
        name.Remove(); 
        work.Save(); 

       } 
      } 


      Console.WriteLine(count); 

      Console.ReadKey(); 
     } 
+0

Wo ist die XML hier? – mybirthname

+0

Weil ich die #REF aus einer Excel-Datei, die im Wesentlichen ein gezippter Ordner von XML-Dokumenten ist –

Antwort

0

Die löscht Lösung für das Problem war ich musste eine ToList zu meiner Variablen Namen hinzufügen.

foreach (var name in names.ToList()) 
      { 

       if (regex.IsMatch(name.InnerText)) 
       { 
        name.Remove(); 
        work.Save(); 

       } 
      } 
Verwandte Themen