2016-12-23 17 views
0

私のツールでは、(コンボボックス - >複数のデータテーブルを使用して)1つの構成を選択でき、それぞれのテーブルは以下のようにExcelシートに反映されます。製品名、シリアル名、長さ1、および合計長さがすべての構成で同じになります)。構成が異なると、長さ2、長さ3、長さ4(ユーザーはこれらの行にデータを追加します)などの列が追加されます。複数の列の設定とExcelでの条件付き書式設定C#

バックグラウンドセルが範囲(minvalからmaxval)にある場合はバックグラウンドセルが緑色になり、範囲外の場合は赤色になる条件式の書式をTotal Length列に追加します。私はソリューションなしで私のコードに固執しています。ユーザーがExcelにデータを追加すると、色は変わりません。助けて。ありがとう!

enter image description here

 private void ManualFormatExcelandAddRules(ExcelWorksheet WS, DataTable DTtoFormat, int ColStartAddOfDT, int RowStartAddOfDT) 
     { 
      int colCountofDT = DTtoFormat.Columns.Count; 
      int rowCountofDT = DTtoFormat.Rows.Count; 
      double minval = 0; 
      double maxval = 0; 
      int flag = 0; 
      for (int Colno = ColStartAddOfDT; Colno < ColStartAddOfDT + colCountofDT; Colno++) 
      { 
       WS.Cells[RowStartAddOfDT, Colno].Style.Border.BorderAround(ExcelBorderStyle.Thin); 
       for (int RowNo = RowStartAddOfDT + 1; RowNo <= RowStartAddOfDT + rowCountofDT; RowNo++) 
       { if (WS.Cells[RowNo, Colno].Text.Contains("to") && WS.Cells[RowNo, ColStartAddOfDT].Text.Contains("DRAM")) 
         { 
          string[] GuidelineVal = WS.Cells[RowNo, Colno].Text.Split("to".ToArray(), StringSplitOptions.RemoveEmptyEntries).ToArray(); 
          if (GuidelineVal[0].Trim() != "NA" && GuidelineVal[1].Trim() != "NA") 
          { 
           minval = Convert.ToDouble(GuidelineVal[0].Trim()); 
           maxval = Convert.ToDouble(GuidelineVal[1].Trim()); 
           flag = 0; 
          } 
          else 
           flag = 1; 
         } 

         else if (WS.Cells[RowNo, Colno].Text == "" && WS.Cells[RowStartAddOfDT + 1, Colno].Text.Contains("to")) 
         { 


          if (flag == 0) 
          { 

           string _statement = "AND(Convert.ToDouble(WS.Cells[RowNo, Colno].Text) >= minval,Convert.ToDouble(WS.Cells[RowNo, Colno].Text) <= maxval)"; 
           var _cond = WS.ConditionalFormatting.AddExpression(WS.Cells[RowNo, Colno]); 
           _cond.Formula = _statement; 
           _cond.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
           _cond.Style.Fill.BackgroundColor.Color = Color.Green;        

          } 
          else 
           WS.Cells[RowNo, Colno].Style.Fill.BackgroundColor.SetColor(Color.Red); 
           WS.Cells[RowNo, Colno].Style.Border.BorderAround(ExcelBorderStyle.Thin); 
        } 
    } 
} 

答えて

1

使用条件付き書式式が間違っている/構文エラーが含まれている/存在しない関数を使用し、それはそれはないとExcelがそれを無視することになりますそれが何をする必要があるか理解する。下限と上限を可能にする

  • RowNoColNo
  • minvalmaxvalに条件付きformattigを適用するセルを示すために:

    あなたのコードを見てみると、あなたはその表現を構成する4つの変数を持っています条件の説明

次のコードでは、これらの変数を使用して正しい式を構築しています。

string _statement = string.Format(
    CultureInfo.InvariantCulture, 
    "AND({0}>={1},{0}<={2})", 
    new OfficeOpenXml.ExcelCellAddress(RowNo, ColNo).Address, 
    minval, 
    maxval); 
var _cond = WS.ConditionalFormatting.AddExpression(WS.Cells[RowNo, ColNo]); 
_cond.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
_cond.Style.Fill.BackgroundColor.Color = Color.Green; 

_cond.Formula = _statement; 

この式では、有効なExcel関数のみが使用されています。 Convert.ToDoubleのような.Netステートメントを混在させることはできません。また、InvariantCultureを数値変換に使用することも重要です。そうしないと、区切り文字が関数の余分なパラメータとして解釈される可能性があります。

この__statementをデバッグするときは、次のようになります。AND(A2>=40.2,A2<=44.5)そしてA2セルに適用すると、それは広告として動作します。

+0

ありがとうございます!できます!:) – juitanis

関連する問題