2016-06-15 12 views
1

私はEPPlusを使用して、検証と条件付き書式付きのExcelドキュメントを生成しています。私は、セルのテキストの長さを確認し、指定された長さよりも大きい場合は色で塗りつぶしたいと思います。私はこれを列全体にしたいと思っています。EPPlus条件付き書式設定文字列全体の列の長さ

var address = new ExcelAddress("$A:$A"); 
var condition = workSheet.ConditionalFormatting.AddExpression(address); 

condition.Formula = "=IF(LEN(A1)>25, TRUE, FALSE)"; 
condition.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
condition.Style.Fill.BackgroundColor.Color = Color.Green; 

生成されたExcelスプレッドシートを開くと、データの復元を要求するエラーが表示されます。

答えて

0

私はこの

using (var app = new ExcelPackage()) 
{ 
    var workSheet = app.Workbook.Worksheets.Add("asdf"); 
    var address = new ExcelAddress("$A:$A"); 
    var condition = workSheet.ConditionalFormatting.AddExpression(address); 
    workSheet.Cells["A1"].Value = "asdfasdfasdfasdfasdfasfdasd"; 
    condition.Formula = "=IF(LEN(A1)>25, TRUE, FALSE)"; 
    condition.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
    condition.Style.Fill.BackgroundColor.Color = System.Drawing.Color.Green; 
    var destinationPath = @"../../GeneratedExcelFile.xlsx"; 
    File.WriteAllBytes(destinationPath, app.GetAsByteArray()); 
} 

を試験したとき、私は問題はあなたがここで

+0

生成されているExcelシートを開こうとしましたか?それはエラーサーバー側をスローしません。私はあなたが提供したスニペットを実行し、それはすべてOKを生成し、開いたときにエラーをスローします。 – GFree

+0

ファイルを開いたときにエラーがスローされませんでした***。 – chandler

0

を提供されているコード以外のものによって引き起こされると思うので、それはすべてのエラーが発生することはありませんでしたが、条件付き書式に全く新しいアプローチであります: LINQを使用して、条件に基づいてセルアドレスを取得できます。 Excelの行番号(iRow)を保存するための追加のプロパティをリストに追加してください。

このアプローチは、高速で柔軟性があり、条件付き書式設定とは異なり、Excelのパフォーマンスを犠牲にしません。ここに記事全文は次のとおりです。

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

は何良いことだEPPlusについて私は範囲アドレスで制限を見ていない - あなたは約15,000のアドレスを渡すことができ、単一の文字列で - 20,000細胞と瞬時にそれらのすべてをフォーマットします。 データを再生するユーザーが動的でなく、(Excelの条件付き書式設定のように)書式がどのように変化しているかを確認したいという唯一の欠点です。