_callFunction(name, args) {
        if (name.indexOf('_xlfn.') === 0)
            name = name.slice(6);
        name = name.toUpperCase();
        // if one arg is null, it means 0 or "" depends on the function it calls
        const nullValue = this.funsNullAs0.includes(name) ? 0 : '';

        if (!this.funsNeedContextAndNoDataRetrieve.includes(name)) {
            // retrieve reference
            args = args.map(arg => {
                if (arg === null)
                    return {value: nullValue, isArray: false, omitted: true};
                const res = this.utils.extractRefValue(arg);

                if (this.funsPreserveRef.includes(name)) {
                    return {value: res.val, isArray: res.isArray, ref: arg.ref};
                }
                return {
                    value: res.val,
                    isArray: res.isArray,
                    isRangeRef: !!FormulaHelpers.isRangeRef(arg),
                    isCellRef: !!FormulaHelpers.isCellRef(arg)
                };
            });
        }
        // console.log('callFunction', name, args)

        if (this.functions[name]) {
            let res;
            try {
                if (!this.funsNeedContextAndNoDataRetrieve.includes(name) && !this.funsNeedContext.includes(name))
                    res = (this.functions[name](...args));
                else
                    res = (this.functions[name](this, ...args));
            } catch (e) {
                // allow functions throw FormulaError, this make functions easier to implement!
                if (e instanceof FormulaError) {
                    return e;
                } else {
                    throw e;
                }
            }
            if (res === undefined) {
                // console.log(`Function ${name} may be not implemented.`);
                if (this.isTest) {
                    if (!this.logs.includes(name)) this.logs.push(name);
                    return {value: 0, ref: {}};
                }
                throw FormulaError.NOT_IMPLEMENTED(name);
            }
            return res;
        } else {
            // console.log(`Function ${name} is not implemented`);
            if (this.isTest) {
                if (!this.logs.includes(name)) this.logs.push(name);
                return {value: 0, ref: {}};
            }
            throw FormulaError.NOT_IMPLEMENTED(name);
        }
    }
Call an excel function.
@param name - Function name.
@param args - Arguments that pass to the function.
@return {*}