18

EPPlusの条件付きフォーマット機能を使用して、ある範囲をフォーマットしようとしています。私は多くの文書を読みましたが、条件付き書式表現についてはどこにも言及されていません。

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

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

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

(私が書いた悪い英語でごめんなさい)

4

3 に答える 3

39

私は自分で解決策を見つけました。サンプルコードを見てください:

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;

上記の例では、

  • _formatRangeAddress式による条件付き書式設定に適用される範囲です。この範囲の最初のセルは、条件式で使用されます。(B3)。
  • _statementは条件の計算に使用される数式です。この文字列は 等号()(MS Excelとの相違点) で始まりません。式の作成に使用されるセルは、の最初のセルです。(B3)。=_formatRangeAddress

これが必要な他の人に役立つことを願っています。-ハン-

于 2012-11-05T10:08:56.537 に答える
1

EPPlusの3.1ベータ版では条件付き書式がサポートされています。

ここでソースコードを見てください:http://epplus.codeplex.com/discussions/348196/

于 2012-11-02T14:04:58.437 に答える
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 これが将来誰かに役立つことを願っています。

于 2018-02-28T15:34:24.763 に答える