2017-05-31 1 views
1

EPPlus v 4.1でC#で作業していて、不連続なセルブロックに式を適用していないのです。EPPlus、不連続範囲に式を適用する

次のコードを使用して、連続した選択されたセルの範囲に式を適用できます。

Worksheet.Select(new ExcelAddress("T2:T10")); 
Worksheet.SelectedRange.Formula = "=if(A2=\"\",\"empty\",\"not empty\")"; 

セルT2のためにチェックされているセルがA2で、セルT3のためにチェックされているセルがA3であるように、それは式を変更しますので、これは素晴らしい作品など

しかし、ときに私セルの連続していないブロックがある場合、式の適用は失敗し、選択範囲内の最初のセルのみが式を受け取ります。次のコードは、セルT2が式を受け取る結果となります。

Cellsプロパティを使用する場合も同じです。

// awesome 
Worksheet.Cells["T2:T10"].Formula = "=if(A2=\"\",\"empty\",\"not empty\")"; 
// not so awesome 
Worksheet.Cells["T2,T5,T8,T10"].Formula = "=if(A2=\"\",\"empty\",\"not empty\")"; 

これはバグ(不明または不明)のように聞こえるのですか、これは私のところではもっと誤りですか?

私は先週のコードプレックスサイトでこれをpostedとしましたが、それは去っています。

ありがとうございます!

+0

[Open-XML-SDK](https://www.nuget.org/packages/DocumentFormat.OpenXml/)よりも優れていますか? – Alex78191

+0

私はそれを使用していないので、私は言うことができません。しかし、提案に感謝します。 – Emilio

答えて

0

私はあなたが正しいと思います。 SetMultiRangeに設定されている

private void SetDelegate() 
{ 
    if (_fromRow == -1) 
    { 
     _changePropMethod = SetUnknown; 
    } 
    //Single cell 
    else if (_fromRow == _toRow && _fromCol == _toCol && Addresses == null) 
    { 
     _changePropMethod = SetSingle; 
    } 
    //Range (ex A1:A2) 
    else if (Addresses == null) 
    { 
     _changePropMethod = SetRange; 
    } 
    //Multi Range (ex A1:A2,C1:C2) 
    else 
    { 
     _changePropMethod = SetMultiRange; 
    } 
} 

すべてのアドレスをループが含まれており、それぞれのSet_Valueを呼び出す:あなたはhttps://epplus.codeplex.com/SourceControl/changeset/view/643d411b032b#EPPlus/ExcelRangeBase.csでコードを見れば、それはコンストラクタによって呼び出さSetDelegate()_changePropMethodデリゲートを設定します。それはSet_Formulaへの直接呼び出しを行い、いくつかの理由で

else if (_fromRow == _toRow && _fromCol == _toCol) 
{ 
    Set_Formula(this, value, _fromRow, _fromCol); 
} 

else 
{ 
    _changePropMethod(this, _setValueDelegate, value); 
} 

ではなくFormulaプロパティのセッターによって:これは、最終的にはValueプロパティのセッターで使用されます。これが意図的であれば、それは非常に奇妙であろう。あなたが言及したように、おそらくそれはバグです。うまくいけば、彼らは応答します。あなたが勇気を感じているなら、あなたはレポをフォークして、それを自分で修正しようと思うかもしれません。 (うまくいけば、彼らはまだ一週間前に最近コミットをしているように見えるので、彼らはコードバックスレポをgithubまたは何かに移動するだろう)。

関連する問題