Class AbstractCalculationEngine

Class AbstractCalculationEngine

Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)

Mewakili mesin perhitungan kustom pengguna untuk memperluas mesin perhitungan default dari Aspose.Cells.

public abstract class AbstractCalculationEngine

Pewarisan

objectAbstractCalculationEngine

Anggota yang Dwarisi

object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()

Contoh

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))
        {
            // lakukan perhitungan untuk MYFUNC di sini
            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);
                }
                // proses parameter di sini
                // res = ...;
            }
            data.CalculatedValue = res;
        }
    }
}

Catatan

Pengguna tidak boleh mengubah bagian mana pun dari Workbook secara langsung dalam implementasi ini (kecuali hasil yang dihitung dari fungsi kustom, yang dapat diatur oleh properti CalculationData.CalculatedValue). Jika tidak, hasil yang tidak terduga atau Exception dapat terjadi. Jika pengguna perlu mengubah data lain selain hasil yang dihitung dalam implementasi untuk beberapa fungsi kustom, misalnya, mengubah rumus sel, gaya, dll., pengguna harus mengumpulkan data tersebut dalam implementasi ini dan mengubahnya di luar ruang lingkup perhitungan rumus.

Konstruktor

AbstractCalculationEngine()

protected AbstractCalculationEngine()

Properti

IsParamArrayModeRequired

Menunjukkan apakah mesin ini memerlukan parameter untuk dihitung dalam mode array. Nilai default adalah false. Jika Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) diperlukan saat menghitung fungsi kustom dan pengguna belum memperbarui definisi untuk mereka (dengan Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), properti ini perlu diatur sebagai true.

public virtual bool IsParamArrayModeRequired { get; }

Nilai Properti

bool

Catatan

Jika mesin perhitungan kustom ini memerlukan parameter untuk dihitung dalam mode array, lebih banyak tumpukan akan diperlukan untuk menyimpan pohon untuk parameter dan metode Calculate() mungkin dipanggil secara rekursif untuk menghitung nilai parameter. Untuk pertimbangan kinerja, harap pertahankan properti ini sebagai nilai default (false) jika tidak ada persyaratan khusus.

IsParamLiteralRequired

Menunjukkan apakah mesin ini memerlukan teks literal dari parameter saat melakukan perhitungan. Nilai default adalah false.

public virtual bool IsParamLiteralRequired { get; }

Nilai Properti

bool

Catatan

Jika mesin perhitungan kustom ini memerlukan teks literal dari parameter, lebih banyak tumpukan akan diperlukan untuk menyimpan teks literal untuk parameter dan metode Calculate() mungkin dipanggil secara rekursif untuk menghitung nilai parameter. Umumnya, teks literal tidak diperlukan untuk menghitung rumus dan properti ini harus tetap sebagai false untuk sebagian besar implementasi agar mendapatkan kinerja yang lebih baik.

ProcessBuiltInFunctions

Apakah fungsi bawaan yang telah didukung oleh mesin bawaan harus diperiksa dan diproses oleh implementasi ini. Default adalah false.

public virtual bool ProcessBuiltInFunctions { get; }

Nilai Properti

bool

Catatan

Jika pengguna perlu mengubah logika perhitungan dari beberapa fungsi bawaan, properti ini harus diatur sebagai true. Jika tidak, harap biarkan properti ini sebagai false untuk pertimbangan kinerja.

Metode

Calculate(CalculationData)

Menghitung satu fungsi dengan data yang diberikan.

public abstract void Calculate(CalculationData data)

Parameter

data CalculationData

data yang diperlukan untuk menghitung fungsi seperti nama fungsi, parameter, dll.

Catatan

Pengguna harus mengatur nilai yang dihitung untuk data yang diberikan untuk semua fungsi (termasuk fungsi asli excel) yang ingin dihitung sendiri dalam implementasi ini.

ForceRecalculate(string)

Apakah memaksa fungsi yang diberikan untuk dihitung ulang selalu saat menghitung rumus bersama.

public virtual bool ForceRecalculate(string functionName)

Parameter

functionName string

nama fungsi. Umumnya ini adalah nama fungsi kustom. Jika Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions adalah true, maka fungsi bawaan juga akan diperiksa di sini.

Mengembalikan

bool

true jika fungsi yang ditentukan perlu dihitung ulang selalu.

Catatan

Untuk rumus bersama, beberapa sel berbagi fungsi yang sama. Jika parameter fungsi tetap sama untuk sel-sel tersebut juga, maka umumnya fungsi ini hanya perlu dihitung sekali. Jadi untuk pertimbangan kinerja, kita hanya menghitung jenis fungsi ini sekali juga (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) hanya dipanggil sekali, bukan dipanggil berulang kali untuk setiap sel). Namun, untuk implementasi kustom pengguna, mungkin fungsi tersebut, terutama fungsi kustom, perlu dihitung secara berbeda untuk sel yang berbeda. Jika demikian, pengguna perlu mengganti metode ini untuk membuatnya mengembalikan true untuk fungsi tersebut. Dan untuk Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData), nilai Aspose.Cells.CalculationData.CalculatedValue yang diberikan mungkin telah diinisialisasi dengan nilai yang di-cache dari perhitungan sebelumnya.

SkipCalculation()

protected void SkipCalculation()
 Indonesia