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; }
ค่า Property
หมายเหตุ
หากเอนจินการคำนวณแบบกำหนดเองนี้ต้องการให้พารามิเตอร์ถูกคำนวณในโหมดอาร์เรย์ จะต้องมีสแต็กเพิ่มเติมเพื่อแคชต้นไม้สำหรับพารามิเตอร์ และเมธอด Calculate() อาจถูกเรียกซ้ำเพื่อคำนวณค่าของพารามิเตอร์ สำหรับการพิจารณาด้านประสิทธิภาพ โปรดเก็บคุณสมบัตินี้ไว้เป็นค่าเริ่มต้น (false) หากไม่มีข้อกำหนดพิเศษ
IsParamLiteralRequired
ระบุว่าเอนจินนี้ต้องการข้อความลิเทอรัลของพารามิเตอร์ในขณะทำการคำนวณหรือไม่ ค่าเริ่มต้นคือ false.
public virtual bool IsParamLiteralRequired { get; }
ค่า Property
หมายเหตุ
หากเอนจินการคำนวณแบบกำหนดเองนี้ต้องการข้อความลิเทอรัลของพารามิเตอร์ จะต้องมีสแต็กเพิ่มเติมเพื่อแคชข้อความลิเทอรัลสำหรับพารามิเตอร์ และเมธอด Calculate() อาจถูกเรียกซ้ำเพื่อคำนวณค่าของพารามิเตอร์ โดยทั่วไปแล้วข้อความลิเทอรัลไม่จำเป็นสำหรับการคำนวณสูตร และคุณสมบัตินี้ควรจะถูกเก็บไว้เป็น false สำหรับการดำเนินการส่วนใหญ่เพื่อให้ได้ประสิทธิภาพที่ดีกว่า
ProcessBuiltInFunctions
ระบุว่าฟังก์ชันที่มีอยู่ซึ่งได้รับการสนับสนุนโดยเอนจินที่มีอยู่ควรได้รับการตรวจสอบและประมวลผลโดยการดำเนินการนี้หรือไม่ ค่าเริ่มต้นคือ false.
public virtual bool ProcessBuiltInFunctions { get; }
ค่า Property
หมายเหตุ
หากผู้ใช้ต้องการเปลี่ยนตรรกะการคำนวณของฟังก์ชันที่มีอยู่บางฟังก์ชัน คุณสมบัตินี้ควรถูกตั้งค่าเป็น true. มิฉะนั้น โปรดปล่อยให้คุณสมบัตินี้เป็น false เพื่อการพิจารณาด้านประสิทธิภาพ
วิธีการ
Calculate(CalculationData)
คำนวณฟังก์ชันหนึ่งด้วยข้อมูลที่กำหนด
public abstract void Calculate(CalculationData data)
พารามิเตอร์
data
CalculationData
ข้อมูลที่จำเป็นในการคำนวณฟังก์ชัน เช่น ชื่อฟังก์ชัน พารามิเตอร์ ฯลฯ
หมายเหตุ
ผู้ใช้ควรกำหนดค่าที่คำนวณสำหรับข้อมูลที่กำหนดสำหรับฟังก์ชันทั้งหมด (รวมถึงฟังก์ชันพื้นเมืองของ Excel) ที่เขาต้องการคำนวณด้วยตนเองในการดำเนินการนี้
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()