2012-11-02 12 views
13

EPPlusの条件付き書式設定機能を使用して範囲を書式設定しようとしています。私は多くの文書を読んだが、条件付き書式表現については何も言及していない。EPPlusを使用した式による条件付き書式設定

私は非常に混乱しています。その機能の使い方を知らない。ここに私のいくつかの質問があります:

  1. は、我々は、パラメータにExcelAddressを置くために、複数の範囲を使用することができます(のような "H1:H17、L1:L17、" AA1:AA17" )
  2. 式は、Formulaプロパティに入れています何とか相互運用Excelなどのかないのですか?(私たちが得意と相互運用にフォーマットするための現在のセル のために表現するために、「A1」を使うように)
  3. はあなたが私に条件付き書式の式を使用して小さなデモコード脚を与えることができます。

ありがとうございました!

答えて

28

は、ここでは、ソースコードを見てみましょう。

  • _formatRangeAddress式によって 条件付き書式設定のために適用される範囲は、上記の例で

    ExcelAddress _formatRangeAddress = new ExcelAddress("B3:B10,D3:D10,F3:F10,H3:H10:J3:J10"); 
    // fill WHITE color if previous cell or current cell is BLANK: 
    // B3 is the current cell because the range _formatRangeAddress starts from B3. 
    // OFFSET(B3,0,-1) returns the previous cell's value. It's excel function. 
    string _statement = "IF(OR(ISBLANK(OFFSET(B3,0,-1)),ISBLANK(B3)),1,0)"; 
    var _cond4 = sheet.ConditionalFormatting.AddExpression(_formatRangeAddress); 
    _cond4.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
    _cond4.Style.Fill.BackgroundColor.Color = Color.White; 
    _cond4.Formula = _statement; 
    
    // fill GREEN color if value of the current cell is greater than 
    // or equals to value of the previous cell 
    _statement = "IF(OFFSET(B3,0,-1)-B3<=0,1,0)"; 
    var _cond1 = sheet.ConditionalFormatting.AddExpression(_formatRangeAddress); 
    _cond1.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
    _cond1.Style.Fill.BackgroundColor.Color = Color.Green; 
    _cond1.Formula = _statement; 
    
    // fill RED color if value of the current cell is less than 
    // value of the previous cell 
    _statement = "IF(OFFSET(B3,0,-1)-B3>0,1,0)"; 
    var _cond3 = sheet.ConditionalFormatting.AddExpression(_formatRangeAddress); 
    _cond3.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
    _cond3.Style.Fill.BackgroundColor.Color = Color.Red; 
    _cond3.Formula = _statement; 
    

    :サンプルコードを取ってください。この 範囲の最初のセルが条件式で使用されます。 (B3)。

  • _statement条件を計算するために使用される式は、この文字列は、等号(=)(MS Excelから相違点)と 開始しない、発現を行うために使用される 細胞が最初の細胞である あります _formatRangeAddressにあります。 (B3)。

これは、必要な他の人にとって役に立ちます。 -Han-

+0

"Contains"テキスト条件付き書式を指定できます。 –

+1

Excel関数です。それらは 'ISNUMBER'と' SEARCH'関数を使用しています。http://office.microsoft.com/en-001/excel-help/check-if-a-cell-contains-text-HP003056106.aspx – Han

+0

Excelで直接条件付き書式設定を使用したいが、あなたの表現に「現在」。あなたは式 'IF(AND(ISBLANK(OFFSET(B3,0、-1))、ISBLANK(B3))、1,0)'として使用し、コードコメントで '// WHITE color前のセルまたは現在のセルは「BLANK:」です。 '現在の'セルへの参照はどこにありますか?私は 'B3'しか見ることができません。 – jotapdiez

0

多くの月が過ぎると、私はLINQとEPPlusを使用してこれを行うためのより柔軟で高速なアプローチを見つけました。リストに余分なプロパティを追加してExcelの行番号を保存し、LINQを使用してセルアドレスを取得するだけです。この場合は、次のようになります。

ここ
string sRng = string.Join(",", YourModel.Where(f => f.YourField == null) 
    .Select(a => "H" + a.iRow + ",L" + a.iRow + ",AA" + a.iRow)); // this address could be many pages and it works 

if (sRng.Length > 0) { 
    ws.Cells[sRng].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.Green); 
} 

は完全な記事です:

https://www.codeproject.com/Tips/1231992/Conditional-Formatting-in-Excel-with-LINQ-and-EPPl

はまた、ここに別の例を参照してください。https://stackoverflow.com/a/49022692/8216122は が、これは将来的に誰かに役立ちます願っています。

関連する問題