2016-12-02 108 views
0

我创建了一个正则表达式模式,在我的excel文件中查找所有#REF。我创建了一个foreach循环以返回所有的#REF,并将它们与控制台一起计数。这工作正常。然而,我然后创建了一个foreach循环来删除所有#REF引用,但它只在每次运行项目时删除一个。我已经调试过了,在Regex在if语句中找到一次匹配之后,下次进入foreach时,它会跳过if语句,就好像它找不到其他匹配一样。我不知道这是为什么使用正则表达式查找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文档的压缩文件夹的excel文件中获得#REF –

回答

0

的解决问题的方法是我需要为我的名称变量添加ToList

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

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

       } 
      }