Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
Đại diện cho động cơ tính toán tùy chỉnh của người dùng để mở rộng động cơ tính toán mặc định của Aspose.Cells.
public abstract class AbstractCalculationEngine
Kế thừa
object ← AbstractCalculationEngine
Các thành viên kế thừa
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Ví dụ
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))
{
//thực hiện tính toán cho MYFUNC ở đây
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);
}
//xử lý tham số ở đây
//res = ...;
}
data.CalculatedValue = res;
}
}
}
Nhận xét
Người dùng không nên sửa đổi bất kỳ phần nào của Workbook trực tiếp trong triển khai này (ngoại trừ kết quả tính toán của hàm tùy chỉnh, có thể được thiết lập bởi thuộc tính CalculationData.CalculatedValue). Nếu không, kết quả không mong muốn hoặc ngoại lệ có thể xảy ra. Nếu người dùng cần thay đổi dữ liệu khác ngoài kết quả tính toán trong triển khai cho một số hàm tùy chỉnh, ví dụ, thay đổi công thức của ô, kiểu dáng, …v.v., người dùng nên tập hợp những dữ liệu đó trong triển khai này và thay đổi chúng ngoài phạm vi tính toán công thức.
Các hàm khởi tạo
AbstractCalculationEngine()
protected AbstractCalculationEngine()
Các thuộc tính
IsParamArrayModeRequired
Chỉ định liệu động cơ này có cần tham số được tính toán ở chế độ mảng hay không. Giá trị mặc định là false. Nếu Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) được yêu cầu khi tính toán các hàm tùy chỉnh và người dùng chưa cập nhật định nghĩa cho chúng (bằng Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), thuộc tính này cần được thiết lập là true.
public virtual bool IsParamArrayModeRequired { get; }
Giá trị thuộc tính
Nhận xét
Nếu động cơ tính toán tùy chỉnh này cần tham số được tính toán ở chế độ mảng, nhiều ngăn xếp hơn sẽ được yêu cầu để lưu trữ cây cho các tham số và phương thức Calculate() có thể được gọi đệ quy để tính toán giá trị của tham số. Để cân nhắc hiệu suất, vui lòng giữ thuộc tính này ở giá trị mặc định (false) nếu không có yêu cầu đặc biệt.
IsParamLiteralRequired
Chỉ định liệu động cơ này có cần văn bản nguyên bản của tham số khi thực hiện tính toán hay không. Giá trị mặc định là false.
public virtual bool IsParamLiteralRequired { get; }
Giá trị thuộc tính
Nhận xét
Nếu động cơ tính toán tùy chỉnh này cần văn bản nguyên bản của tham số, nhiều ngăn xếp hơn sẽ được yêu cầu để lưu trữ văn bản nguyên bản cho các tham số và phương thức Calculate() có thể được gọi đệ quy để tính toán giá trị của tham số. Thông thường văn bản nguyên bản không cần thiết cho việc tính toán các công thức và thuộc tính này nên được giữ là false cho hầu hết các triển khai để có hiệu suất tốt hơn.
ProcessBuiltInFunctions
Liệu các hàm tích hợp đã được hỗ trợ bởi động cơ tích hợp có nên được kiểm tra và xử lý bởi triển khai này hay không. Mặc định là false.
public virtual bool ProcessBuiltInFunctions { get; }
Giá trị thuộc tính
Nhận xét
Nếu người dùng cần thay đổi logic tính toán của một số hàm tích hợp, thuộc tính này nên được thiết lập là true. Ngược lại, vui lòng để thuộc tính này là false để cân nhắc hiệu suất.
Các phương thức
Calculate(CalculationData)
Tính toán một hàm với dữ liệu đã cho.
public abstract void Calculate(CalculationData data)
Tham số
data
CalculationData
dữ liệu cần thiết để tính toán hàm như tên hàm, tham số, …v.v.
Nhận xét
Người dùng nên thiết lập giá trị đã tính toán cho dữ liệu đã cho cho tất cả các hàm (bao gồm cả các hàm gốc của excel) mà họ muốn tính toán bằng chính mình trong triển khai này.
ForceRecalculate(string)
Liệu có nên buộc hàm đã cho được tính toán lại mỗi khi tính toán các công thức chia sẻ hay không.
public virtual bool ForceRecalculate(string functionName)
Tham số
functionName
string
tên của hàm. Thông thường đó là tên của hàm tùy chỉnh. Nếu Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions là true, thì các hàm tích hợp cũng sẽ được kiểm tra ở đây.
Trả về
true nếu hàm được chỉ định cần được tính toán lại mỗi lúc.
Nhận xét
Đối với các công thức chia sẻ, nhiều ô chia sẻ cùng một hàm. Nếu các tham số của hàm giữ nguyên cho những ô đó thì thông thường hàm này chỉ cần được tính toán một lần. Vì vậy, để cân nhắc hiệu suất, chúng tôi chỉ tính toán loại hàm này một lần (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) chỉ được gọi một lần, thay vì được gọi lặp lại cho mỗi ô). Tuy nhiên, đối với triển khai tùy chỉnh của người dùng, có thể hàm, đặc biệt là hàm tùy chỉnh, cần được tính toán khác nhau cho các ô khác nhau. Nếu vậy, người dùng cần ghi đè phương thức này để làm cho nó trả về true cho hàm đó. Và đối với Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData), giá trị Aspose.Cells.CalculationData.CalculatedValue đã cho có thể đã được khởi tạo với giá trị đã lưu trữ của phép tính trước đó.
SkipCalculation()
protected void SkipCalculation()