【发布时间】:2016-12-02 20:32:24
【问题描述】:
我创建了一个正则表达式模式,可以在我的 excel 文件中找到所有 #REF。我创建了一个foreach 循环来返回所有#REF 并在控制台中将它们连同它们的计数一起播放。这工作正常。然而,我随后创建了一个foreach 循环来删除所有#REF 引用,但每次运行项目时它只会删除一个。我已经对此进行了调试,并且在 Regex 在 if 语句中找到匹配项后,下次它进入 foreach 时,它会跳过 if 语句,就好像它找不到另一个匹配项一样。我不确定这是为什么
我的代码是休闲的
返回所有#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();
}
【问题讨论】:
-
这里的xml在哪里?
-
因为我从一个 excel 文件中获取 #REF,该文件本质上是一个 xml 文档的压缩文件夹
标签: c# excel foreach openxml openxml-sdk