2016-11-29 14 views
0

私はopenXMLを使用していますが、特定のパターンと一致するものがあるかどうかを調べるためにExcelファイルをループしています。私のRegexパターンは、落ち着いている@"(?<!\w)#\w+"です。これは "#"で始まるものを返します。 「#」で始まるいくつかの定義済みの名前があり、Excelブックのxmlに<definedName name="_KEY" hidden="1" localSheetId="3">#REF!</definedName>などあります。しかし、定義された名前を見つけようとすると、私のカウントはゼロに戻ります。私は、ファイルを参照し、ファイルを選択し特定のパターンを見つけるためにforeachを使ってループする正規表現

まず休閑として

私のコードです。私はこれが完全に機能することを確認しました。

それから、試合ごとに試して試してみてください。ここで私の問題がどこにあるのですか?私は私の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

。正しいツールを使用してください。 System.XmlライブラリまたはSystem.Xml.Linqライブラリを使用できます。 – jdweng

答えて

1

names.ToString()によって返される内容を確認してください。正規表現を実行しないでください。

はあなたのパターンに一致するDefinedNamesの数は、あなたが使用することができます取得するには:あなたがXMLまたはHTMLを解析する正規表現を使用しないでください

names.Count(n => Regex.IsMatch(n.InnerText, @"(?<!\w)#\w+")); 
+0

これを私のforeachループに追加するか、私はforeachループを取り除く必要がありますか? –

+0

ねえ、私は答えを編集しました、今あなたのニーズを反映する必要があります。 –

+0

これはうまくいくようです。どうもありがとうございました :) –

関連する問題