我正在使用openXML,我正在尝试遍历excel文件以查看是否有任何匹配特定模式。我的正则表达式模式是休闲@"(?<!\w)#\w+"
。这应该返回以“#
”开头的任何内容。在我的excel工作簿xml中有许多以“#
”开头的已定义名称,例如<definedName name="_KEY" hidden="1" localSheetId="3">#REF!</definedName>
。但是,当我尝试找到已定义的名称时,我的计数返回零。
我的代码是休闲
首先,我浏览文件并选择文件。我确保这完美无缺。
然后我尝试计算并循环完成每场比赛,这就是我遇到问题的地方。我假设我弄乱了foreach
循环,我真的需要一些指导。
var spreadsheet = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(filePath, false);
var workbook = spreadsheet.WorkbookPart;
var names = workbook.Workbook.DefinedNames;
//result.InactiveNamedRangeCount = names.Where(n => n.InnerText.Contains(pattern)).Count();
foreach (Match match in Regex.Matches(names.ToString(), @"(?<!\w)#\w+"))
{
result.InactiveNamedRangeCount = names.Where(n => n.InnerText.Contains(match.ToString())).Count();
}
答案 0 :(得分:1)
检查names.ToString()返回的内容,你不应该在它上运行正则表达式。
要获取与您的模式匹配的DefinedNames数量,您可以使用:
names.Count(n => Regex.IsMatch(n.InnerText, @"(?<!\w)#\w+"));