Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
نمایانگر موتور محاسبات سفارشی کاربر برای گسترش موتور محاسبات پیشفرض Aspose.Cells است.
public abstract class AbstractCalculationEngine
وراثت
object ← AbstractCalculationEngine
اعضای وراثت یافته
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
مثالها
Workbook wb = new Workbook("custom_calc.xlsx");
CalculationOptions opts = new CalculationOptions();
opts.CustomEngine = new MyEngine();
wb.CalculateFormula(opts);
class MyEngine : AbstractCalculationEngine
{
public override void Calculate(CalculationData data)
{
string funcName = data.FunctionName.ToUpper();
if ("MYFUNC".Equals(funcName))
{
//محاسبه برای MYFUNC در اینجا
int count = data.ParamCount;
object res = null;
for (int i = 0; i < count; i++)
{
object pv = data.GetParamValue(i);
if (pv is ReferredArea)
{
ReferredArea ra = (ReferredArea)pv;
pv = ra.GetValue(0, 0);
}
//پردازش پارامتر در اینجا
//res = ...;
}
data.CalculatedValue = res;
}
}
}
ملاحظات
کاربر نباید هیچ بخشی از Workbook را بهطور مستقیم در این پیادهسازی تغییر دهد (به جز نتیجه محاسبهشده تابع سفارشی، که میتواند توسط ویژگی CalculationData.CalculatedValue تنظیم شود). در غیر این صورت ممکن است نتیجه غیرمنتظره یا استثنایی رخ دهد. اگر کاربر نیاز به تغییر دادههای دیگری غیر از نتیجه محاسبهشده در پیادهسازی برای برخی توابع سفارشی دارد، بهعنوان مثال، تغییر فرمول سلول، سبک و …، کاربر باید آن دادهها را در این پیادهسازی جمعآوری کرده و آنها را خارج از دامنه محاسبه فرمول تغییر دهد.
سازندهها
AbstractCalculationEngine()
protected AbstractCalculationEngine()
ویژگیها
IsParamArrayModeRequired
نشان میدهد که آیا این موتور نیاز به محاسبه پارامتر در حالت آرایه دارد یا خیر. مقدار پیشفرض false است. اگر Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) هنگام محاسبه توابع سفارشی نیاز باشد و کاربر تعریف آنها را بهروزرسانی نکرده باشد (توسط Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), این ویژگی باید به true تنظیم شود.
public virtual bool IsParamArrayModeRequired { get; }
مقدار ویژگی
ملاحظات
اگر این موتور محاسبات سفارشی نیاز به محاسبه پارامتر در حالت آرایه داشته باشد، پشتههای بیشتری برای کش کردن درخت پارامترها نیاز خواهد بود و متد Calculate() ممکن است بهصورت بازگشتی برای محاسبه مقدار پارامتر فراخوانی شود. بهمنظور بهینهسازی عملکرد، لطفاً این ویژگی را بهعنوان مقدار پیشفرض (false) نگه دارید اگر هیچ نیاز خاصی وجود نداشته باشد.
IsParamLiteralRequired
نشان میدهد که آیا این موتور نیاز به متن ادبی پارامتر در حین انجام محاسبه دارد یا خیر. مقدار پیشفرض false است.
public virtual bool IsParamLiteralRequired { get; }
مقدار ویژگی
ملاحظات
اگر این موتور محاسبات سفارشی نیاز به متن ادبی پارامتر داشته باشد، پشتههای بیشتری برای کش کردن متن ادبی پارامترها نیاز خواهد بود و متد Calculate() ممکن است بهصورت بازگشتی برای محاسبه مقدار پارامتر فراخوانی شود. بهطور کلی، متن ادبی برای محاسبه فرمولها مورد نیاز نیست و این ویژگی باید در اکثر پیادهسازیها بهعنوان false نگه داشته شود تا عملکرد بهتری بهدست آید.
ProcessBuiltInFunctions
آیا توابع داخلی که توسط موتور داخلی پشتیبانی شدهاند باید توسط این پیادهسازی بررسی و پردازش شوند. پیشفرض false است.
public virtual bool ProcessBuiltInFunctions { get; }
مقدار ویژگی
ملاحظات
اگر کاربر نیاز به تغییر منطق محاسبات برخی توابع داخلی دارد، این ویژگی باید به true تنظیم شود. در غیر این صورت لطفاً این ویژگی را بهعنوان false برای بهینهسازی عملکرد نگه دارید.
متدها
Calculate(CalculationData)
یک تابع را با دادههای دادهشده محاسبه میکند.
public abstract void Calculate(CalculationData data)
پارامترها
data
CalculationData
دادههای مورد نیاز برای محاسبه تابع مانند نام تابع، پارامترها و … .
ملاحظات
کاربر باید مقدار محاسبهشده را برای دادههای دادهشده برای تمام توابع (شامل توابع بومی اکسل) که میخواهد خود بهطور مستقل محاسبه کند، تنظیم کند.
ForceRecalculate(string)
آیا باید تابع دادهشده همیشه هنگام محاسبه فرمولهای مشترک دوباره محاسبه شود یا خیر.
public virtual bool ForceRecalculate(string functionName)
پارامترها
functionName
string
نام تابع. بهطور کلی، نام تابع سفارشی است. اگر Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions true باشد، توابع داخلی نیز در اینجا بررسی خواهند شد.
برمیگرداند
true اگر تابع مشخصشده نیاز به محاسبه مجدد همیشه داشته باشد.
ملاحظات
برای فرمولهای مشترک، چندین سلول تابع یکسانی را به اشتراک میگذارند. اگر پارامترهای تابع برای آن سلولها نیز یکسان باشند، بهطور کلی این تابع فقط یک بار نیاز به محاسبه دارد. بنابراین، بهمنظور بهینهسازی عملکرد، ما فقط این نوع تابع را یک بار محاسبه میکنیم (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) فقط یک بار فراخوانی میشود، به جای اینکه بهطور مکرر برای هر سلول فراخوانی شود). با این حال، برای پیادهسازی سفارشی کاربر، ممکن است تابع، بهویژه تابع سفارشی، نیاز به محاسبه متفاوتی برای سلولهای مختلف داشته باشد. اگر اینطور باشد، کاربر باید این متد را بازنویسی کند تا برای تابع true برگرداند. و برای Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData)، مقدار دادهشده Aspose.Cells.CalculationData.CalculatedValue ممکن است با مقدار کششده محاسبه قبلی مقداردهی اولیه شده باشد.
SkipCalculation()
protected void SkipCalculation()