C# EPPlus,将公式应用于非连续范围
我在使用EPPlus V4.1的C#中工作,但没有将公式应用于非连续的单元格块 我可以使用下面的代码将公式应用于一系列连续的选定单元格C# EPPlus,将公式应用于非连续范围,c#,epplus-4,C#,Epplus 4,我在使用EPPlus V4.1的C#中工作,但没有将公式应用于非连续的单元格块 我可以使用下面的代码将公式应用于一系列连续的选定单元格 Worksheet.Select(new ExcelAddress("T2:T10")); Worksheet.SelectedRange.Formula = "=if(A2=\"\",\"empty\",\"not empty\")"; 这非常有效,因为它改变了公式,因此对于T2单元,被检查的单元是A2,对于T3单元,被检查的单元是A3,等等 但是,当我有一
Worksheet.Select(new ExcelAddress("T2:T10"));
Worksheet.SelectedRange.Formula = "=if(A2=\"\",\"empty\",\"not empty\")";
这非常有效,因为它改变了公式,因此对于T2单元,被检查的单元是A2,对于T3单元,被检查的单元是A3,等等
但是,当我有一个非连续的单元格块时,公式的应用似乎失败,并且只有选定范围内的第一个单元格接收公式。下面的代码只会导致单元格T2接收公式
Worksheet.Select(new ExcelAddress("T2,T5,T8,T10"));
Worksheet.SelectedRange.Formula = "=if(A2=\"\",\"empty\",\"not empty\")";
使用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\")";
这听起来像是一个bug(已知或未知),还是这更像是我的一个错误
上周我在codeplex网站上也看到了这一点,但这似乎正在消失
谢谢 我认为你是对的。如果您查看此处的代码,它将在构造函数调用的
SetDelegate()
中设置\u changePropMethod
委托:
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;
}
}
它被设置为SetMultiRange
,其中包含一个循环,通过每个地址上的所有地址和调用set\u Value
。这最终由值的setter使用
属性:
else
{
_changePropMethod(this, _setValueDelegate, value);
}
但不是通过公式
属性设置器:
else if (_fromRow == _toRow && _fromCol == _toCol)
{
Set_Formula(this, value, _fromRow, _fromCol);
}
出于某种原因,它直接调用
Set\u Formula
。如果这是故意的,那就很奇怪了。更可能是你提到的一个bug。希望他们会作出回应。或者,如果你感到勇敢,你可以选择回购协议,并尝试自己解决:)。(希望他们能将codeplex repo迁移到github或其他地方,因为他们一周前似乎还在进行提交)。我想你是对的。如果您查看此处的代码,它将在构造函数调用的SetDelegate()
中设置\u changePropMethod
委托:
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;
}
}
它被设置为SetMultiRange
,其中包含一个循环,通过每个地址上的所有地址和调用set\u Value
。这最终由值的setter使用
属性:
else
{
_changePropMethod(this, _setValueDelegate, value);
}
但不是通过公式
属性设置器:
else if (_fromRow == _toRow && _fromCol == _toCol)
{
Set_Formula(this, value, _fromRow, _fromCol);
}
出于某种原因,它直接调用
Set\u Formula
。如果这是故意的,那就很奇怪了。更可能是你提到的一个bug。希望他们会作出回应。或者,如果你感到勇敢,你可以选择回购协议,并尝试自己解决:)。(希望他们能将codeplex repo迁移到github或其他地方,因为一周前他们似乎还在进行提交)。这比以前好吗?我还没有用过,所以我不能说。但是谢谢你的建议。它比吗?我没有用过,所以我不能说。但是谢谢你的建议。