2016-12-02 3 views
0

私のExcelファイル内にすべて#REFという正規表現パターンが作成されました。私はforeachループを作成して、すべて#REFを返し、それらを数えてコンソールに表示します。これは正常に動作します。しかし、私はforeachループを作成して#REFの参照をすべて削除しましたが、プロジェクトを実行するたびに1つだけ削除します。私はこれをデバッグした後、Regexが一度if文で一致を見つけると、次回foreachに入るときに別の一致が見つからないかのようにif文をスキップします。私は、これはRegexを使ってXMLパターンを探すforeachループ

私のコードである理由はわからない

コードが休閑地として、すべての#REFが

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

コード各#REF値に

  foreach (var name in names) 
      { 

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

       } 
      } 


      Console.WriteLine(count); 

      Console.ReadKey(); 
     } 
+0

xmlはここにありますか? – mybirthname

+0

私は基本的にXML文書のzipフォルダであるExcelファイル内から#REFを取得しているので –

答えて

0

削除する値を返すことです問題を解決するには、私の名前変数にToListを追加する必要がありました。

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

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

       } 
      } 
関連する問題